- (IBAction)buyHouse[6]:(id)sender;我想通过执行上面所示的操作来创建一个IBActions数组。它不允许我。是否可以创建一个方法数组,这样如果我想实现它,我只需要这样做。
- (IBAction)buyHouse[3]:(id)sender{
_Price.text = [NSString formatWithString: @"hello"];
}这个IBAction是针对许多UIButton的。
这是我的第一个问题,所以我真的很抱歉,如果它是含糊的。我对目标C和这个社区很陌生。
发布于 2015-12-27 10:55:47
既然Objective是如此动态,那么只需知道一个方法的名称,就可以调用它:
MyClass.m:
static NSArray *_methods = nil;
@implementation MyClass
-(id)init
{
self = [super init];
if (self) {
if (!_methods) {
_methods = @[
@"method1:",
@"method2:",
@"method3:"
];
}
}
return self;
}
- (void)callMethod:(NSUInteger)index forSender:(id)sender
{
SEL selector = NSSelectorFromString(_methods[index]);
[self performSelector:selector withObject:sender];
}
- (IBAction)method1:(id)sender
{
}
// etc.发布于 2015-12-27 12:01:09
可以使用块而不是方法。
用于匹配IBAction签名的块。在本例中未使用。
typedef void(^IBActionBlock)(id sender);定义您的操作数组。数组中的每个条目都是以单个对象作为参数的块。
NSArray *ibActions = @[
^(id sender) {
// 0
},
^(id sender) {
// 1
},
^(id sender) {
// 2
},
^(id sender) {
// 3
},
^(id sender) {
// 4
},
^(id sender) {
// 5
},
];例如呼叫站点。
ibActions[2](button);发布于 2015-12-27 12:02:18
您可以使用标记并利用performSelector来完成这一任务:
buyHouseByTag,然后将所有按钮连接到该方法buyHouseByTag是您的代理:
- (IBAction)buyHouseByTag:(id)sender {
NSInteger index = [sender tag];
NSString *method = [NSString stringWithFormat:@"buyHouse%d:", index];
SEL sel = NSSelectorFromString(method)
[self performSelector:sel withObject:sender];
}
- (IBAction)buyHouse0:(id)sender {
}
- (IBAction)buyHouse1:(id)sender {
}
- (IBAction)buyHouse2:(id)sender {
}https://stackoverflow.com/questions/34479682
复制相似问题