第二个视图控制器中的 UIButton - Touch Up Inside 不起作用(Touch Down 可以)

Posted

技术标签:

【中文标题】第二个视图控制器中的 UIButton - Touch Up Inside 不起作用(Touch Down 可以)【英文标题】:UIButton in second View Controller - Touch Up Inside not working (Touch Down does) 【发布时间】:2011-11-19 22:15:58 【问题描述】:

我在 XCode 中创建了一个新项目,并使用新的 Storyboard 功能创建了两个不同的视图控制器。

第一个 View Controller 附加到主文件(ViewController.h、Viewcontroller.m)。第二个视图控制器附加到它自己的一组 .h/.m 文件 (NewUserController.m/.h)

现在解决我在过去几个小时内无法找到解决方案的问题;

我在第二个视图控制器中添加了一个按钮,并将该按钮附加到 IBAction (verifyNumber)。当我附加 'Touched Up Inside' 事件时,IBAction 永远不会被触发。但是,当我附加“Touch Down”时,一切正常..

两个视图控制器都选择了“启用用户交互”,除了按钮之外,第二个视图控制器不包含任何其他元素。另外,我的手动 performSegueWithIdentifier 正在工作(从 view1 切换到 view2)。

谁能发现哪里出了问题?

代码:

ViewController.m

- (void)firstStartup 

    // Future use for getting userID

    // Switch to loginview
    [self performSegueWithIdentifier:@"segueLogin" sender:self];       



#pragma mark - View lifecycle

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // Fire firstStartup
    [self firstStartup];


NewUserController.h

#import <UIKit/UIKit.h>

@interface NewUserController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *inputNumber;

- (IBAction)backgroundTap;
//- (IBAction)verifyNumber;

- (IBAction)verifyNumber:(id)sender;

@end

NewUserController.m

#import "NewUserController.h"

@implementation NewUserController
@synthesize inputNumber;


// Collect User data & Start Request
- (IBAction)verifyNumber:(id)sender; 

    inputNumber.text = @"testing";



- (IBAction)backgroundTap 

    [inputNumber resignFirstResponder];    


更新

由于 NJones 的响应,我进行了更多测试,并删除了我在第二个视图中显示的手势识别器。删除此识别器后,UIButton 可与所有事件一起使用(Touched Up Inside)。

识别器是否以某种方式阻止任何“点击”事件覆盖对象(例如 UIButton)?

【问题讨论】:

【参考方案1】:

我有一些想法,

1) 为什么会有:

    - (IBAction)backgroundTap;
    //- (IBAction)verifyNumber;

    - (IBAction)verifyNumber:(id)sender;

verifyNumberverifyNumber:(id)sender是有区别的,两者可以同时存在,都可以在nib中连接。

2) 您是否在视图上使用任何 UIGestureRecoginzers?

3) 这个按钮是自定义按钮还是 UIButton 的子类?

4) (我真的不认为这将有助于解决您的问题,这只是一种好习惯,而且我已经在输入 :))使用视图属性检查是否调用了方法充其量是不确定的。尝试在 IBAction 方法中添加一条日志语句,如下所示:

- (IBAction)verifyNumber:(id)sender; 
    NSLog(@"verifyNumber:");
    inputNumber.text = @"testing";

【讨论】:

1) 我已经注释掉了第一个 IBAction 以测试在通过发件人时是否会有任何差异。目前唯一的功能(删除了其余的)是:-(IBAction)verifyNumber:(id)sender -这个也连接到按钮动作(dubbel检查)2)是的,我已经添加了一个手势识别器检测点击的视图 -> 这会激活 (IBAction)backgroundTap -> 目的:在视图上隐藏点击时的键盘 3) UIButton 的子类 4) 我在函数中添加了一些日志记录以记录输入值,这样更好当然 === 不幸的是没有区别.. 在您的回复之后,我又测试了一些(删除了视图的手势识别器),现在按钮作为“广告”工作(Touched Up Inside 触发该功能)

以上是关于第二个视图控制器中的 UIButton - Touch Up Inside 不起作用(Touch Down 可以)的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 UIButton 背景图像的变化?

如何在解除第二个控制器后调用第一个控制器中的函数

uitableview didselectrowatindex 仅适用于第一个表视图而不适用于同一视图控制器中的第二个表视图?

如何在 UICollection 补充视图中使用 UIButton?

如何从一个 XIB 中的不同 UIViewController 文件控制第二个 UIView(子视图)

使用两个视图控制器,第二个不会显示视图