3

次のように、ボタンを含むパネルのようなスプリングボードを作成しました。

-(void)configurePanel{

self.criteriaPanel.scrollEnabled=YES;
self.criteriaPanel=[[UIScrollView alloc] initWithFrame:CGRectMake(
                                                                0.0f, 
                                                                0.0f, 
                                                                [UIScreen mainScreen].bounds.size.width,
                                                                (BUTTON_HEIGHT+(3*BUTTON_Y_OFFSET))
                                                                )];

UIView *scrollViewContent=[[UIView alloc]init];
NSArray *criteriaTypeButtonTitles=[NSArray arrayWithObjects:
                                 @"Option1",
                                 @"Option2",
                                 @"Option3",
                                 @"Option4",
                                 @"Option5",
                                 @"Option6",
                                 nil
                                 ];

for (int i=0; i<[criteriaTypeButtonTitles count]; i++) {
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  button.tag=i;
  button.frame = CGRectMake(
                          (((BUTTON_X_OFFSET*i)+(BUTTON_WIDTH*i))+BUTTON_X_OFFSET)
                          , BUTTON_Y_OFFSET
                          , BUTTON_WIDTH
                          , BUTTON_HEIGHT
                          );  
  [button setTitle:[criteriaTypeButtonTitles objectAtIndex:i] forState:UIControlStateNormal];
  [button setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];
  button.titleLabel.font=[UIFont systemFontOfSize:13.0f];
  [button setBackgroundColor:[UIColor grayColor]];
  [button.layer setCornerRadius:10.0f];
  [button.layer setBorderWidth:1.0f];
  [button addTarget:self action:@selector(sortByButtonTap:) forControlEvents:UIControlEventTouchDown];
  [scrollViewContent addSubview:button];
}

//based upon # of buttons
self.criteriaPanel.contentSize=CGSizeMake(
                                        (([criteriaTypeButtonTitles count]*BUTTON_WIDTH)+([criteriaTypeButtonTitles count]*BUTTON_X_OFFSET)),
                                        (BUTTON_HEIGHT+(2*BUTTON_Y_OFFSET)));
[self.criteriaPanel addSubview:scrollViewContent];
[self.view addSubview:self.criteriaPanel];
}

パネルは正しく表示され、スクロールしますが、ボタンのタップ イベント (sortByButtonTap:) は呼び出されません。これは、スクロールビューに含まれるビューに含まれるボタンに関連していると思われます。他の多くの質問とドキュメントを読んだ後でも、解決策がどうあるべきかわかりません。

編集: ボタンを UIScrollView (self.criteriaPanel) に直接追加して実験しました。ボタン タップは sortByButtonTap: を呼び出します。

4

5 に答える 5

0

タッチ イベントを受信するには、ボタンをuserInteractionEnabled含むビューを設定する必要がある場合があります。scrollViewContent

[scrollViewContent setUserInteractionEnabled:YES];
于 2012-04-24T21:31:16.317 に答える
0

それ以外の:

[button addTarget:self 
           action:@selector(sortByButtonTap:) 
 forControlEvents:UIControlEventTouchDown];

試す:

[button addTarget:self 
           action:@selector(sortByButtonTap:) 
 forControlEvents:UIControlEventTouchUpInside];
于 2012-04-24T21:32:07.987 に答える
0

クエリについては、次のコードに従ってください。

Scrollview に UIButton を追加する

    scrollview.pagingEnabled = YES;
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake();
    [button setTitle:@"X" forState:UIControlStateNormal];
    [button setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(btnCloseClicked:withEvent:) forControlEvents:UIControlEventTouchUpInside];
    [button addTarget:self action:@selector(btnCloseDraged:withEvent:) forControlEvents:UIControlEventTouchDragInside];
    [button addTarget:self action:@selector(btnCloseDragedEnd:withEvent:) forControlEvents:UIControlEventTouchDragExit];
    [scrollview addSubview:button];
    scrollview.userInteractionEnabled = YES;

この 3 つの方法のボタンを手動で配置できます。

まだ質問がある場合はお知らせください。

于 2012-10-06T07:03:57.803 に答える
0

試してみるとどうなりますか:

[button setExclusiveTouch:YES];

ボタンは、タッチ イベントも処理するビュー内にあると、異常に動作する傾向があります。

于 2012-04-25T13:24:20.650 に答える