繁体   English   中英

如何以编程方式调用具有ID发送者的IBAction方法?

[英]How to call an IBAction method with id sender programmatically?

我的代码中包含以下IBAction方法。

-(IBAction)handleSingleTap:(id)sender
{
    // need to recognize the called object from here (sender)
}


UIView *viewRow = [[UIView alloc] initWithFrame:CGRectMake(20, y, 270, 60)];
// Add action event to viewRow
UITapGestureRecognizer *singleFingerTap = 
[[UITapGestureRecognizer alloc] initWithTarget:self 
                                        action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleFingerTap];
[singleFingerTap release];
//
UILabel *infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(5,30, 100, 20)];
infoLabel.text = @"AAAANNNNVVVVVVGGGGGG";
//[viewRow addSubview:infoLabel];
viewRow.backgroundColor = [UIColor whiteColor];

// display the seperator line 
UILabel *seperatorLablel = [[UILabel alloc] initWithFrame:CGRectMake(0,45, 270, 20)];
seperatorLablel.text = @" ___________________________";
[viewRow addSubview:seperatorLablel];
[scrollview addSubview:viewRow];

如何在允许它接收该方法的调用者对象的同时调用IBAction方法?

方法签名是手势识别器和UIControl所共有的。 两者都可以正常工作而不会发出警告或错误。 要确定发件人,请首先确定类型...

- (IBAction)handleSingleTap:(id)sender
{
// need to recognize the called object from here (sender)
    if ([sender isKindOfClass:[UIGestureRecognizer self]]) {
        // it's a gesture recognizer.  we can cast it and use it like this
        UITapGestureRecognizer *tapGR = (UITapGestureRecognizer *)sender;
        NSLog(@"the sending view is %@", tapGR.view);
    } else if ([sender isKindOfClass:[UIButton self]]) {
        // it's a button
        UIButton *button = (UIButton *)sender;
        button.selected = YES;
    }
    // and so on ...
}

要调用它,直接调用它,让它连接的UIControl调用它,或者让手势识别器调用它。 他们都会工作。

您不必调用它,因为您将方法用作UITapGestureRecognizer Selector ,因此只要轻按该应用程序,它将自动调用。 另外,如果您可以在action:@selector(handleSingleTap:)中的方法名称后识别冒号,则意味着将UITapGestureRecognizer类型的对象发送给该方法。 如果您不想发送任何对象,则只需从方法中删除冒号和(id)sender

如您所愿:

[self handleSingleTap:self.view];

sender可以使用任何您喜欢的id类型。 您还可以发送带有标签的UIButton实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM