UIBarButtonItem 在显示两次后未触发选择器
Posted
技术标签:
【中文标题】UIBarButtonItem 在显示两次后未触发选择器【英文标题】:UIBarButtonItem not firing selector after it has been shown twice 【发布时间】:2013-05-30 00:17:38 【问题描述】:我在 UIBarButtonItem 上使用这个分类方法来创建自定义按钮如下:
+ (UIBarButtonItem*)itemWithImage:(UIImage*)image forState:(UIControlState)controlState target:(id)target action:(SEL)action
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:image forState:controlState];
button.frame= CGRectMake(0.0, 0.0, 44, 44);
[button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 44, 44) ];
[v addSubview:button];
return [[UIBarButtonItem alloc] initWithCustomView:button];
然后我创建按钮并将它们分配给我的视图控制器中的导航项,如下所示:
-(void)viewDidLoad
[super viewDidLoad];
UIBarButtonItem * cancelButtonItem = [UIBarButtonItem itemWithImage:[UIImage imageNamed:@"Cancel"] forState:UIControlStateNormal target:self action:@selector(cancel)];
self.navigationItem.leftBarButtonItem = cancelButtonItem;
UIBarButtonItem * checkmarkButtonItem = [UIBarButtonItem itemWithImage:[UIImage imageNamed:@"checkmark_active"] forState:UIControlStateNormal target:self action:@selector(done)];
self.navigationItem.rightBarButtonItem = checkmarkButtonItem;
我第一次创建视图控制器并推送它时,按钮可以工作,但是当创建一个全新的视图控制器并将其推送到导航堆栈时,它会中断。有任何想法吗?我已经彻底调试了这个并且没有想法。
【问题讨论】:
我注意到你创建了UIView* v
然后从不使用它。这不是问题,但您可以删除这些行,它们不是必需的。
我不明白你什么时候有问题。您的标题在显示两次后显示。你的最后一段说它在“我创建一个视图控制器并推送它”时有效,但在“创建一个全新的视图控制器并将其推送到导航堆栈”时不起作用——这两个听起来是一回事。
@progrmr 好点,错过了谢谢。
@rdelmar 我很抱歉不清楚。我想包含一个视频,但我正在尝试获得一个好的截屏应用程序。他们是一样的东西。我创建一个并按下它,按钮就会起作用,创建另一个并按下它,触摸时没有任何反应。
【参考方案1】:
您的代码的类别部分似乎没有任何问题。我怀疑该错误可能源于其他原因。更多信息或代码可能会有所帮助......你所说的break等是什么意思? 在将 ViewController 压入堆栈之前检查初始化 ViewController 的方式,如果使用 outlet,可能是简单的语法错误或错误的 nib 名称。
【讨论】:
感谢您的回复和优点。这里没有使用界面构建器。它以非常标准的方式初始化。似乎按钮以某种方式被禁用,或者动作和目标被取消了。以上是关于UIBarButtonItem 在显示两次后未触发选择器的主要内容,如果未能解决你的问题,请参考以下文章
在 oracle 表单 10g 中的 LOV 填充后未触发后查询触发器
为啥 RecyclerView 项目在点击两次后才改变背景颜色?
jQuery 在第一次切换后仅在 Safari iOS5 中单击 3 次后触发