【问题标题】:accessing UIButton by (id)sender通过 (id)sender 访问 UIButton
【发布时间】:2011-05-06 00:34:50
【问题描述】:

我有以下代码

-(IBAction)ATapped:(id)sender{
//want some way to hide the button which is tapped
self.hidden = YES;
}

链接到多个按钮。我想隐藏触发此 IBAction 的按钮。 self.hidden 显然不是按钮。

如何隐藏被点击的按钮?发件人。

谢谢

【问题讨论】:

    标签: iphone objective-c uibutton sender


    【解决方案1】:

    向发件人发送 setHidden 消息:

    -(IBAction)ATapped:(id)sender{
       //want some way to hide the button which is tapped
       [sender setHidden:YES];
    }
    

    【讨论】:

    • 我试过 sender.hidden = YES;在我发布这个之前。它给出了一个错误。
    • 好的,.hidden 给出“不是结构或联合”错误,但是 [setHidden:YES] 有效;)
    • 对于用户属性 .hidden,您必须将发件人发送到 UIButton - 就像在 Henrik 回答中一样,并且您可以将 setHidden 消息发送到任何对象。但是,如果您不能 100% 确定发件人是 UIButton,那么您应该检查发件人是否响应 setHidden
    • 或者检查它是否是一个按钮。 (if ([sender isMemberOfClass:[UIButton class]]){ [sender setHidden:YES]; })
    • @Emil,最好使用 isKindOfClass: 来处理 UIButton 子类的情况。最好使用 respondsToSelector: 方法进行检查
    【解决方案2】:

    您获取作为参数提供的按钮对象(id)

    -(IBAction)ATapped:(id)sender{
       // Possible Cast
       UIButton* myButton = (UIButton*)sender;
       myButton.hidden = YES;
    }
    

    【讨论】:

      【解决方案3】:

      Vladimir 和 Henrik 的答案都是正确的。不要让“id”类型吓到你。它仍然是您的按钮对象,只是编译器不知道类型是什么。因此,除非将其转换为特定类型(Henrik 的回答),否则您无法在其上引用属性。

      -(IBAction)ATapped:(id)sender{
         // Possible Cast
         UIButton* myButton = (UIButton*)sender;
         myButton.hidden = YES;
      }
      

      或者您可以在对象上发送任何消息(调用任何方法),假设您知道类型(您知道类型,它是一个按钮),而无需强制转换(弗拉基米尔的回答)。

      -(IBAction)ATapped:(id)sender{
         //want some way to hide the button which is tapped
         [sender setHidden:YES];
      }
      

      【讨论】:

      • 两种方法都可能引发错误:我的方法可能会引发转换错误,而 Vladimir 方法可能会引发消息传递错误
      【解决方案4】:

      如果你想要防弹演员/消息,试试这个:

      -(IBAction)ATapped:(id)sender{
         // Secure Cast of sender to UIButton
         if ([sender isKindOfClass:[UIButton class]]) {
             UIButton* myButton = (UIButton*)sender;
             myButton.hidden = YES;
         }
      }
      

      【讨论】:

      • 我相信 NSButton 应该是 UIButton,但是是的,谢谢。
      【解决方案5】:

      而且...如果你想改变一个按钮的背景颜色,正确的代码应该是这样的?

      [sender setBackgroundColor:(NSColor *)redColor];
      

      例如? ...因为它不适合我的...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-14
        • 2014-09-27
        • 2020-10-09
        • 2018-03-26
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多