如何以编程方式告知代码或用户操作是否调用了IBAction。
例如
我有一个方法,-(IBAction)someMethodWithIts:(id)sender
我已经链接到UISegmentedControl上的valueChanged。
可以通过
来调用[self someMethodWithIts:foo];
有没有办法区分呼叫是否来自第一种方式?
干杯
萨姆
答案 0 :(得分:3)
如果您可以传递nil
作为发件人(这是传统的)并使用它来表明它是以编程方式发送的,那就没问题。但是我认为其他任何东西都太脆弱了你应该像这样分解代码:
- (void)someMethod {
// stuff shared by everyone
}
- (IBAction)someMethodWithIts:(id)sender {
// stuff specific to IBAction
[self someMethod];
}
如果您真的想要发件人,那么您可以这样做:
- (void)someMethodWithIts:(id)sender triggeredByUser:(BOOL)isUser {
}
- (IBAction)someMethodWithIts:(id)sender {
[self someMethodWithIts:sender triggeredByUser:YES];
}
但总的来说,如果你希望IBAction与程序化的变化不同,那么就不要对IBAction进行程序化改变。
答案 1 :(得分:0)
if ([sender isKindOfClass:[UIControl class]]) {
UIControl *controlSender = (UIControl *)sender;
if (sender.selected) {
// then it's #1
} else {
// then it's #2
}
} else if ([sender isKindOfClass:[Foo class]]) {
// then it's #3
}
可能会工作。或者围绕在UIControl或UISegmentedControl上定义的发件人的其他属性。也许是state
。我的猜测是,当用户进行交互时,你可以找到不同的东西,而不是用户。
答案 2 :(得分:0)
你真的想要使用这样的方法
-(IBAction)actionWithSender:(id)sender event:(UIEvent*)event
{
if (event) {
} else {
}
}
如果您发现event
参数为nil
,则表示来自您的代码中的来电,否则,该来自用户事件。