【问题标题】:UIButton @selector never actioned when I click on the button当我单击按钮时,UIButton @selector 从未采取行动
【发布时间】:2012-05-02 16:20:55
【问题描述】:

我有一个 UIbutton 调用同一个类中的方法,我正在使用 @selector 并传递了方法名称,我设置了一个断点并注意到该方法根本没有到达,我编写了这段代码并我认为它工作正常,但它永远不会到达方法体:

- (IBAction)setEndTime:(id)sender {
[self performSegueWithIdentifier:@"showEndTimePicker" sender:sender];
UIViewController *TimePickerVC=[self.storyboard instantiateViewControllerWithIdentifier:@"setEndTime"];
packtimePicker=(UIDatePicker*)[TimePickerVC.view  viewWithTag:2];
NSLog(@"PickerTag%i",packtimePicker.tag);
self.finishedTime=packtimePicker.date;
//     NSLog(@"Date returned is ---> %@",finishedTime);
UIButton *btn=(UIButton*)[TimePickerVC.view viewWithTag:3];
NSLog(@"Button Tag%i",btn.tag);
[btn addTarget:self action:@selector(setSelectedValueToAttr:)  forControlEvents:UIControlEventTouchUpInside];

方法:

-(void)setSelectedValueToAttr:(UIButton *) sender{
finishedTime=packtimePicker.date;
NSLog(@"Time returned----> %@",finishedTime);}
 }

【问题讨论】:

  • 您是否检查过 btn 实例是否定义为 UIButton?

标签: iphone objective-c uibutton selector


【解决方案1】:

您是否检查过是否返回正确的按钮?你的日志显示什么?应该是ButtonTag3 - 是这样的吗?

self所引用的类中的方法setSelectedValueToAttr:是吗?

如果所有这些都是正确的,您的按钮可能只是因为您的视图结构而没有任何接触。

【讨论】:

  • 是的,它返回 3 并且方法 setSelectedValueToAttr: is i 是 self 引用的类
【解决方案2】:

尝试更改按钮的标题以确认您确实获得了所需的按钮。

[btn setTitle:@"test" forState:UIControlStateNormal]; 

我不相信标签日志记录可以确认您正在取回您认为您正在获得的确切按钮。这应该可以缩小问题的范围。

另外,确认按钮及其父视图的 userInteractionEnabled 设置为 YES。

【讨论】:

  • 我的视图控制器中只有一个按钮
  • 我试过了,但它没有改变按钮的标题!!会发生什么
  • 这是你的问题 :) 你得到的是一个不同的对象,而不是按钮。
  • 2012-05-02 19:21:25.382 MeetingRoomProject[11907:17603] PickerTag2 2012-05-02 19:21:25.383 MeetingRoomProject[11907:17603] 按钮 Tag3 2012-05-02 19: 21:25.595 MeetingRoomProject[11907:17603] PickerTag2 2012-05-02 19:21:25.596 MeetingRoomProject[11907:17603] Button Tag3 2012-05-02 19:21:26.121 MeetingRoomProject[11907:17603] PickerTag2 201 19:21:26.123 MeetingRoomProject[11907:17603] 按钮标签3
  • 很有可能,其他东西的标签为 3。尝试将标签更改为 9 之类的东西,然后看看是否有效。
【解决方案3】:

您肯定分配了错误的标签编号。查看下面的示例,我在将其转换为 UIButton 之前检查了类的类型。

 UIView *someView = [self.view viewWithTag:5];

    if([someView isKindOfClass:[UIButton class]])
    {
        UIButton *button = (UIButton *) someView; 

        NSLog(@"uibutton");
    }
    else 
    {
        // some other control 
    }

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2014-10-31
    相关资源
    最近更新 更多