1

UIButton を含む単純なフッター バーを構築する別の UIView クラスがあります。

  - (id)initWithFrame:(CGRect)frame
  {
    self = [super initWithFrame:CGRectMake(0, 410, 320, 50)];
    if (self) {
      int buttonHeight = self.frame.size.height;
      int buttonWidth = 70;
      int nextBtnPosX =0;
      int nextBtnPosY =0;


      self.backgroundColor =[UIColor colorWithRed:254.0/255.0 green:193.0/255.0 blue:32.0/255.0 alpha:1.0];
      [self sendSubviewToBack:self];
      UIButton *nextBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
      [nextBtn setTitle:@"Next" forState:UIControlStateNormal];
      nextBtn.frame = CGRectMake(nextBtnPosX, nextBtnPosY, buttonWidth, buttonHeight);
      [nextBtn addTarget:self.superview action:@selector(GoToNextPage) forControlEvents:UIControlEventTouchUpInside];   

      [self addSubview:nextBtn];

    }
    return self;
  }

このフッター ビュー クラスを各ビューにサブビューとして追加するいくつかの ViewControllers があります。

  UIView *newFooter = [[theFooter alloc] init];
  [self.view addSubview:newFooter];

ここで、フッター ビュー内の実際の UIButton は、追加先の viewController ごとに異なるタグを持つ必要があります。

したがって、IBAction を実際のビュー コントローラーに追加し、フッター ビューを介してこれを呼び出すのが最善だと思います。

しかし、ここで問題が発生しました。親コントローラーを呼び出して、addTarget からフッター サブビュー内から IBAction(GoToNextPage) を初期化するにはどうすればよいですか?

また、フッター サブビュー内にすべてを配置して、必要なターゲットを渡す方が簡単でしょうか。

4

1 に答える 1

1

ここでは、何をすべきかについての大まかな概要を示します。これは、UIView のヘッダー ファイルがどのように見えるかです

@protocol myViewControllerDelegate <NSObject>
@optional
- (void)didPushButton:(id)sender;
@end

@interface UIViewController : UITableViewController
{
    __unsafe_unretained id <myViewControllerDelegate> delegate;
}

@property (nonatomic, assign) id <myViewControllerDelegate> delegate;

@end

@synthesize delegate;メインファイルで忘れないでください。

最後に、メイン ファイルに、UIButton アクションを受け取る IBAction があります。アクションの名前が buttonPushed だとしましょう。

そのアクションを次のように設定します。

- (IBAction)buttonPushed:(id)sender
{
    if (delegate)
        [delegate didPushButton:sender];
}

最後に、この viewController を使用している各 viewController にデリゲートを設定する必要があることを思い出してください。

UIView *newFooter = [[theFooter alloc] init];
[self.view addSubview:newFooter];
newFooter.delegate = self;
于 2012-10-18T09:45:40.163 に答える