我已经创建了一个自定义警报方法,里面有一个UITableView。
typedef void (^Succes)(id data);
typedef void (^Failure)(NSError *error);
+ (void)testForTable:(NSString *)title withSuccess:(Succes)success failure:(Failure)failure {
SCLAlertView *alert = [[SCLAlertView alloc] initWithNewWindow];
alert.customViewColor = [UIColor paperColorLightBlue500];
[alert setShowAnimationType:SlideInFromRight];
UITableView *tableView = [alert addTableView];
tableView.delegate = self;
tableView.dataSource = self;
[alert showEdit:self title:@"Test for table"
subTitle:@"This is a test alert for a table"
closeButtonTitle:nil duration:0.0f];
}
#pragma mark - TableView Methods
+ (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 40;
}
+ (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 20;
}
+ (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(cell == nil) cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
return cell;
}
+ (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%d", indexPath.row);
}
现在,理想情况下,当用户触及UITableViewCell
时,我希望将indexPath.row
传递回Success
的{{1}}参数。我怎样才能做到这一点?这甚至可能吗?
答案 0 :(得分:0)
SCLAlertView应该是UITableView的委托,因此它可以处理didSelectRowAtIndexPath:
。
看到dataSource非常简单,SCLAlertView也可以是dataSource。
所以:
tableView.delegate = alert;
tableView.dataSource = alert;
然后将您的委托实现移动到SCLAlertView。
编辑
我不知道对象Success
是什么类型的对象,但是如果它被阻止,您可以在UIViewController
上保留对它的引用,并在{didSelectRowAtIndexPath:
时调用它1}}。
编辑2
您的成功块需要接受NSInteger参数:
typedef void (^Success)(id data, NSInteger row);
然后你会在代表上调用它:
+ (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
id data; //this data is a placeholder, i dont know how you get this.
if (self.success) {
self.success(data, indexPath.row);
}
}
您可以在代理
上保留成功块的引用@property (nonatomic, copy) Success success;