2010-03-13 54 views
0

我看到有类似的问题发布在这里,但没有解决方案为我工作。这里有:iPhone的UIButton addTarget:行动:forControlEvents:不工作

我有一个UIView框架内的UIButton实例,它位于另一个UIView框架内,它位于主窗口UIView中。即:

UIWindow 
--> UIView (searchView) 
    --> UISearchBar (findField) 
    --> UIView (prevButtonView) 
    --> UIButton (prevButton) 
    --> UIView (nextButtonView) 
    --> UIButton (nextButton) 

到目前为止,这么好:一切都按照我的意愿进行布置。但是,按钮不接受任何类型的用户输入。我使用的UIButton方法addTarget:动作:forControlEvents:和给你的我在做什么的想法,这是我的Next按钮的代码:

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部分的上方标出。

任何人有任何建议吗?我全力以赴。

感谢您的阅读。

亚伦。

回答

2

我想通了,所以这是为了后代的缘故。

最初,我通过将它们嵌套到UIViews并设置它们的框架属性来定位我的按钮。我能够通过利用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); 

一切都开始工作了。去搞清楚。

干杯! 亚伦。

相关问题