Objective-C:addTarget:action:forControlEvent for subview button

时间:2010-02-23 14:19:35

标签: iphone objective-c

我正在做一个包含viewController类(PhotoListViewController)的iPhone ap。此viewController的视图有一个子视图,其中包含一个作为子视图附加的按钮。我正在尝试使用addTarget:action:forControlEvent方法来调用PhotoListViewController类的实例方法,以便在按下按钮时执行操作但该方法未被调用。有关如何使这项工作的任何想法?

这是相关的代码。我知道你的第一个虽然是我为什么要嵌套子视图,但这只是我的程序的一个提炼版本 - 有理由我正在进行嵌套。我知道可能有其他方法来设置程序,所以我不必这样做嵌套,但我真正的问题是 - 为什么这不起作用?

/ 代码 /

    @implementation PhotoListViewController


- (void)loadView {
    [super viewDidLoad];
 //load elements into the viewController

 //first create the frame
 CGRect frameParent = CGRectMake(0, 0, 0, 0); 
 UIView *viewPerson = [[UIView alloc] initWithFrame:frameParent];

 CGRect frameChild = CGRectMake(0, 20, 0, 0); 
 UIView *newView = [[UIView alloc] initWithFrame:frameChild];

        UIButton *btnShow = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
 btnShow.frame = CGRectMake(230, 120, 80, 30);
 [btnShow setTitle:@"View!" forState:UIControlStateNormal ];
 [btnShow addTarget:self 
action:@selector(viewPhoto_click:) 
forControlEvents:UIControlEventTouchUpInside];
 [newView addSubview:btnShow];
 [viewPerson addSubview:newView];
        [newView release];

 [self setView:viewPerson];
 [viewPerson release];
}


- (void)viewPhoto_click:(UIButton*)sender {
 NSLog(@"HI");
}

2 个答案:

答案 0 :(得分:1)

它可能没有关系,但viewPersonnewView的宽度和高度均为0.您可能希望为这些视图提供非空大小({的第3和第4个参数{1}})。

答案 1 :(得分:1)

action:@selector(viewPhoto_click:) 
forControlEvents:UIControlEventTouchUpInside];

可能是复制粘贴拼写错误,但您是否尝试删除选择后的viewPhoto_click之后的内容?

另外。在大多数示例中,事件处理程序看起来像这样。

- (void) viewPhoto_click: (id)sender

不确定它是否有任何不同