在代码中调用 IBAction 并发送标签
Posted
技术标签:
【中文标题】在代码中调用 IBAction 并发送标签【英文标题】:Calling an IBAction in code and sending a tag through too 【发布时间】:2013-08-08 11:00:43 【问题描述】:所以我有一个连接到 IB 中的多个按钮的 IBAction 我希望在调用另一个 IBAction 时触发此操作我还希望它能够将第二个操作中的 int 识别为 [sender tag]。
// viewController.m
-(IBAction)buttonPress
int getInter = [sender tag];
UIView *tmpView = [self.view viewWithTag:getInter];
NSString *title = [(UIButton *)sender currentTitle];
然后我有另一个需要调用 buttonPress 的操作。
-(IBAction)secondButtonPress
int varInt = 1
[self buttonPress: nil] <--- How do I pass varInt that buttonPress would recognise as a sender Tag here?
我意识到我可以像这样创建按钮并复制 secondButtonPress 中的代码,但这似乎很混乱......
UIButton *tmpButton2 = (UIButton *)[self.view viewWithTag:varInt];
所以问题是,有没有办法让 buttonPress 认为它已被按下并传递一个变量作为该操作的发送者标签。以某种方式以编程方式欺骗 buttonPress 认为它已被按下。
提前谢谢你。
【问题讨论】:
我很困惑,为什么不把你的按钮链接到第一个 IBAction,第二个有什么作用? 基本上第一个是keyboardPress,第二个是hintAction,但我认为更容易识别键盘上答案的正确字母,然后以编程方式“欺骗”keyboardPressed动作进入思考它已被按下。我认为这比再次编写代码块要快得多。 这里有一个类似的问题***.com/questions/2889408/…,但我不明白 Georges Oates Larsen 给出的答案或如何实现它。 【参考方案1】:我最终将它连接到同一个 IBAction 并运行 if 语句以在调用该标记时执行某些操作。
现在看起来很简单!
-(IBAction)buttonPress
int getInter = [sender tag];
if ([sender tag] == 2)
//Do something just for that button.
else
UIView *tmpView = [self.view viewWithTag:getInter];
NSString *title = [(UIButton *)sender currentTitle];
【讨论】:
【参考方案2】:UIButton *btn1 = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 20, 20)];
[btn1 setTitle:@"Button 1" forState:UIControlStateNormal];
btn1.tag = 1;
[btn1 addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn1];
UIButton *btn2 = [[UIButton alloc] initWithFrame:CGRectMake(10, 50, 20, 20)];
[btn2 setTitle:@"Button 2" forState:UIControlStateNormal];
btn2.tag = 2;
[btn2 addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn2];
UIButton *btn3 = [[UIButton alloc] initWithFrame:CGRectMake(10, 90, 20, 20)];
[btn3 setTitle:@"Button 3" forState:UIControlStateNormal];
btn3.tag = 3;
[btn3 addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn3];
按如下方式编写按钮点击方法并在其中获取按钮标签..
-(IBAction)buttonClick:(id)sender
UIButton *btn = (UIButton *) sender;
NSLog(@"%d",btn.tag);
【讨论】:
有没有办法通过变量 int 发送,而不是按钮点击的发送者,就像问题中一样?【参考方案3】:只需在 initWithNibName 方法中设置标签。跟着样本看看对你有没有帮助!!
@property(nonatomic,strong)IBOutlet UIButton *btn1;
@property(nonatomic,strong)IBOutlet UIButton *btn2;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
// Set the Tag
self.btn1.tag=1;
self.btn1.tag=2;
return self;
-(IBAction)selectedButtonClick:(id)sender
UIButton *btn = (UIButton *) sender;
NSLog(@"selectedButton%d",btn.tag);
【讨论】:
以上是关于在代码中调用 IBAction 并发送标签的主要内容,如果未能解决你的问题,请参考以下文章
如何从objective-c中的代码调用点击手势IBAction
UIButton 的 IBAction 导致无法识别的选择器发送到实例错误 (iOS)
在 Mac Catalyst 项目中未调用 IBAction