【お知らせ】まとめて検索などの提供終了

現在、iPhoneのホーム画面風アプリを制作しています。

PageControlとScrollViewを使用して、ページの移動はできるようになりましたが、
以下の問題が発生して困っています。

[問題]
・PageControlで2ページの画面を作っていますが、1ページ目に乗っている「UIButton」は正しく反応するのですが、2ページ目(スライドして表示)の上に乗っている「UIButton」がどうしても反応しません。。。

何か設定が必要なのでしょうか?


***PageControl & ScrollViewのコーディング(一部抜粋)***
(UIButtonの記述等は省略しています)

[XXXViewController.h]

@interface XXXViewController : UIViewController <UIScrollViewDelegate> {

// 画面スクロール用
UIScrollView *scrollView;

// PageControl [画面下方の白丸]
UIView *pageView;
UIPageControl *pageControl;

@property (nonatomic, retain) IBOutlet UIScrollView *scrollView;
@property (nonatomic, retain) IBOutlet UIView *pageView;
@property (nonatomic, retain) IBOutlet UIPageControl *pageControl;



[XXXViewController.m]


- (void)viewDidLoad {
[super viewDidLoad];

scrollView.pagingEnabled = YES;
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 2, scrollView.frame.size.height);
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.delegate = self;

pageControl.numberOfPages = 2;
pageControl.currentPage = 0;

pageView.backgroundColor = UIColor.clearColor;

[scrollView addSubview:pageView];
}

- (IBAction)changePage:(id)sender {
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * pageControl.currentPage;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];
}


- (void)scrollViewDidScroll:(UIScrollView *)sender {
CGFloat pageWidth = scrollView.frame.size.width;
pageControl.currentPage = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
}

このQ&Aに関連する最新のQ&A

A 回答 (3件)

> どうやら、Interface builderで最初に表示するようにしているページの


> ボタンは反応するようなのですが、それ以外のページのボタンが反応しないようです。

「IBActionに接続できるUIControlはひとつだけ」という制限はありません。いくつでも接続できます。もしそうでなければ、IBActionメソッドの「(id)sender」という引数の意味がありません。
なので、これ以上の検討は、プロジェクトそのものを直接見させていただく以外は、無理だと判断します。

問題の解決ではなく、とりあえずごまかしておくということなら、Interface Builderでなく、プログラムでUIControl(UIButton)のアクションーターゲットを設定してみてはいかがですか?

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
    • good
    • 0
この回答へのお礼

>harawoさん

度々ご確認頂きまして、本当にありがとうございます。

ようやく問題が解決しました。。。

今回UIScrollの上に乗せているPageVIew(UIView)は、Interface Builder で設定していたのですが、
Interface Builder上では、そのUIViewを1ページ分しか表示していませんでした(320*460)。
これを、2ページ分の640*460にまで広げて表示をして実行したところ、2ページ目のボタンも
問題なく動作致しました。

Interface Builderを再度細かく見直すことで、解決に至ることができました。
そのきっかけを与えて頂いたことに感謝いたします!!
お騒がせして申し訳ございませんでした。また、ご対応頂きましてありがとうございました!

お礼日時:2011/07/04 15:56

> 以下に、メソッドを掲載します。



拝見しましたが、とくに問題は見つけられませんでした。
(「initWithNibName:bundle:」の引数「bundle:」を、nilにすると、「NSBundle mainBundle」を探しに行くので、わざわざ指定する必要はありません)

InterfaceBuilder(Xcode 3の場合)にて、ボタンからIBActionへの接続が切れていないか、確認することから、始めてみてはいかがですか?
    • good
    • 0
この回答へのお礼

ご確認頂きまして、ありがとうございます。

そうですか、記述には問題なさそうなんですね。
ボタン→IBActionの設定も再確認しましたが、問題なしでした。

どうやら、Interface builderで最初に表示するようにしているページの
ボタンは反応するようなのですが、それ以外のページのボタンが反応しないようです。
なので、例えばページAとページBがあり、
(1)Aを1ページ目に指定すると、A上のボタンは反応。Bは反応なし。
(2)Bを1ページ目に指定すると、B上のボタンは反応。Aは反応なし。
という現象が起きています。。。

お礼日時:2011/07/04 00:37

> [問題]


・PageControlで2ページの画面を作っていますが、1ページ目に乗っている「UIButton」は正しく反応するのですが、2ページ目(スライドして表示)の上に乗っている「UIButton」がどうしても反応しません。

「1ページ目に乗っている「UIButton」」をタップして、どういうことをしたいのか、説明してください。
「2ページ目(スライドして表示)の上に乗っている「UIButton」」をタップして、どういうことをしたいのか、説明してください。
そのためのメソッドを、それぞれについて掲載してください。

この回答への補足

> harawoさん

1ページ目、2ページ目ともに「UIButton」をタップして、別のViewControllerに飛ばす設定をしています。
両ページの構成や、ボタンの役割は同じです。

以下に、メソッドを掲載します。
宜しくお願いします。

// 1ページ目 ボタン1
- (IBAction)button1_1:(id)sender {
viewNo = 1;
[self goToSecondClass];
}

- (void)goToSecondClass {

if (count <= (x3 - 1)) {
if (self.secondClassViewController == nil) {
SecondClassViewController *second = [[SecondClassViewController alloc]
initWithNibName:@"SecondClassViewController"
bundle:[NSBundle mainBundle]];
self.secondClassViewController = second;
[second release];
}
secondClassViewController.viewNo = viewNo;
self.secondClassViewController.modalTransitionStyle =
UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:self.secondClassViewController animated:YES];
}
else if (count > (x3 - 1)) {
InputPWViewController *inputController = [[InputPWViewController alloc]
initWithNibName:@"InputPWViewController"
bundle:nil];
inputController.modalTransitionStyle =
UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:inputController animated:YES];

[inputController release];
}
}

補足日時:2011/07/03 03:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング