iPhone UIButton addTarget:action:forControlEvents: 不工作
Posted
技术标签:
【中文标题】iPhone UIButton addTarget:action:forControlEvents: 不工作【英文标题】:iPhone UIButton addTarget:action:forControlEvents: not working 【发布时间】:2010-03-13 02:38:28 【问题描述】:我看到这里发布了类似的问题,但没有一个解决方案适合我。如下:
我在 UIView 框架内有一个 UIButton 实例,该实例位于另一个 UIView 框架内,该框架位于主窗口 UIView 中。也就是说:
UIWindow
--> UIView (searchView)
--> UISearchBar (findField)
--> UIView (prevButtonView)
--> UIButton (prevButton)
--> UIView (nextButtonView)
--> UIButton (nextButton)
到目前为止,一切都很好:一切都按照我的意愿布置。但是,这些按钮不接受任何类型的用户输入。我正在使用 UIButton 方法 addTarget:action:forControlEvents: 为了让您了解我在做什么,这是我的 nextButton 代码:
nextButton = [UIButton buttonWithType:UIButtonTypeCustom];
[nextButton setImage:[UIImage imageNamed:@"find_next_on.png"] forState:UIControlStateNormal];
[nextButton setImage:[UIImage imageNamed:@"find_next_off.png"] forState:UIControlStateDisabled];
[nextButton setImage:[UIImage imageNamed:@"find_next_off.png"] forState:UIControlStateHighlighted];
[nextButton addTarget:self action:@selector(nextResult:) forControlEvents:UIControlEventTouchUpInside];
nextResult: 方法永远不会被调用,按钮的状态不会在触摸时改变,而且我没有做任何该死的事情来让它工作。我认为所有这些视图层都存在问题:也许我的按钮顶部有东西,但我不确定它可能是什么。
为了信息过载,我找到了一些代码,可以打印出我所有的视图信息。这就是我的整个视图层次结构:
UIWindow
0, 0, 320, 480
UILayoutContainerView
0, 0, 320, 480
UINavigationTransitionView
0, 0, 320, 480
UIViewControllerWrapperView
0, 64, 320, 416
UIView
0, 0, 320, 416
UIWebView
0, 44, 320, 416
UIScroller
0, 0, 320, 416
UIImageView
0, 0, 54, 54
UIImageView
0, 0, 54, 54
UIImageView
0, 0, 54, 54
UIImageView
0, 0, 54, 54
UIImageView
-14.5, 14.5, 30, 1
UIImageView
-14.5, 14.5, 30, 1
UIImageView
0, 0, 1, 30
UIImageView
0, 0, 1, 30
UIImageView
0, 430, 320, 30
UIImageView
0, 0, 320, 30
UIWebDocumentView
0, 0, 320, 21291
UIView
0, 0, 320, 44
UISearchBar
10, 8, 240, 30
UISearchBarBackground
0, 0, 240, 30
UISearchBarTextField
5, -2, 230, 31
UITextFieldBorderView
0, 0, 230, 31
UIPushButton
205, 6, 19, 19
UIImageView
10, 8, 15, 15
UILabel
30, 7, 163, 18
UIView
290, 15, 23, 23
UIButton
0, 0, 0, 0
UIImageView
-12, -12, 23, 23
UIView
260, 15, 23, 23
UIButton
0, 0, 0, 0
UIImageView
-12, -12, 23, 23
UINavigationBar
0, 20, 320, 44
UINavigationButton
267, 7, 48, 30
UIImageView
0, 0, 48, 30
UIButtonLabel
11, 7, 26, 15
UINavigationItemView
79, 8, 180, 27
UINavigationItemButtonView
5, 7, 66, 30
MBProgressHUD
0, 0, 320, 480
UIActivityIndicatorView
141, 206, 37, 37
UILabel
117, 247, 86, 27
相关部分在 UINavigationBar 部分上方注明。
有人有什么建议吗?我都出来了。
感谢阅读。
亚伦。
【问题讨论】:
【参考方案1】:我想通了,所以为了后代的缘故,这是交易。
最初,我通过将按钮嵌套到 UIView 中并设置它们的框架属性来定位按钮。我能够通过利用 UIButton 对 UIView 的父辈来做同样的事情来简化这一点。所以我拿走了嵌套视图并声明了 UIButton 的位置,如下所示:
nextButton.frame = CGRectMake(searchView.frame.size.width - 30, 15, 23, 23);
但这并没有解决我的问题;它只是让我的代码更精简。原来是我的框架 X 属性的计算导致了这个问题。当我这样重构时:
NSInteger nextX = searchView.frame.size.width - 30;
nextButton.frame = CGRectMake(nextX, 15, 23, 23);
一切都重新开始了。去图吧。
干杯! 亚伦。
【讨论】:
以上是关于iPhone UIButton addTarget:action:forControlEvents: 不工作的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 的 Swift addTarget 在 UIView 中不起作用
具有自定义视图的 UIButton - addTarget:action:forControlEvents: 不起作用