
現在、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;
}
No.3ベストアンサー
- 回答日時:
> どうやら、Interface builderで最初に表示するようにしているページの
> ボタンは反応するようなのですが、それ以外のページのボタンが反応しないようです。
「IBActionに接続できるUIControlはひとつだけ」という制限はありません。いくつでも接続できます。もしそうでなければ、IBActionメソッドの「(id)sender」という引数の意味がありません。
なので、これ以上の検討は、プロジェクトそのものを直接見させていただく以外は、無理だと判断します。
問題の解決ではなく、とりあえずごまかしておくということなら、Interface Builderでなく、プログラムでUIControl(UIButton)のアクションーターゲットを設定してみてはいかがですか?
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
>harawoさん
度々ご確認頂きまして、本当にありがとうございます。
ようやく問題が解決しました。。。
今回UIScrollの上に乗せているPageVIew(UIView)は、Interface Builder で設定していたのですが、
Interface Builder上では、そのUIViewを1ページ分しか表示していませんでした(320*460)。
これを、2ページ分の640*460にまで広げて表示をして実行したところ、2ページ目のボタンも
問題なく動作致しました。
Interface Builderを再度細かく見直すことで、解決に至ることができました。
そのきっかけを与えて頂いたことに感謝いたします!!
お騒がせして申し訳ございませんでした。また、ご対応頂きましてありがとうございました!
No.2
- 回答日時:
> 以下に、メソッドを掲載します。
拝見しましたが、とくに問題は見つけられませんでした。
(「initWithNibName:bundle:」の引数「bundle:」を、nilにすると、「NSBundle mainBundle」を探しに行くので、わざわざ指定する必要はありません)
InterfaceBuilder(Xcode 3の場合)にて、ボタンからIBActionへの接続が切れていないか、確認することから、始めてみてはいかがですか?
ご確認頂きまして、ありがとうございます。
そうですか、記述には問題なさそうなんですね。
ボタン→IBActionの設定も再確認しましたが、問題なしでした。
どうやら、Interface builderで最初に表示するようにしているページの
ボタンは反応するようなのですが、それ以外のページのボタンが反応しないようです。
なので、例えばページAとページBがあり、
(1)Aを1ページ目に指定すると、A上のボタンは反応。Bは反応なし。
(2)Bを1ページ目に指定すると、B上のボタンは反応。Aは反応なし。
という現象が起きています。。。
No.1
- 回答日時:
> [問題]
・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];
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルを開く都度の画面(縮...
-
Quick Time の操作バーを任意で...
-
ダイアログボックスが画面の外...
-
画面での表示が目障り
-
MacのDockの端の隙間をなくしたい
-
Windows10のウィンドウ
-
画面をそのまま印刷したい!
-
pcの画面がカクカクします。 自...
-
Windows10、アクティブウィンド...
-
mac のpagesで実寸を確認しなが...
-
Wordをクリックすると、サブ画...
-
急ぎ、サンダーバード 送信ボタ...
-
サムネイル表示 高速化するた...
-
スマホで YouTube のホーム画面...
-
エクセルのアドインタブはどの...
-
デスクトップのアイコン表示だ...
-
PC版のBF1をやっているのですが...
-
ウィンドウの開く位置を修正し...
-
アウトルックを「タスクバー」...
-
チャートについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを開く都度の画面(縮...
-
ダイアログボックスが画面の外...
-
右クリックも左クリックもメニ...
-
画面での表示が目障り
-
Quick Time の操作バーを任意で...
-
Excelの表をJPEG画像にしたい
-
Windows10 のアクティブウィン...
-
Windows10、アクティブウィンド...
-
英語版IEでファイルの「参照」...
-
pcの画面がカクカクします。 自...
-
メモ帳を広げすぎて、画面枠か...
-
mac のpagesで実寸を確認しなが...
-
Windows11でアイコンが変更でき...
-
こんな画面が表示してしまった...
-
Windows10 ポップアップ画面を...
-
緊急 なぞにWindows11の画面の...
-
インターネットの画面が小さく...
-
コマンドプロンプトを閉じるシ...
-
VMware Fusion4全画面表示から...
-
パソコンの画面が巨大化しまし...
おすすめ情報