在我的iPhone应用程序中,我必须动态地将按钮与scrollView一起放置。
现在我需要按钮Click事件与每个按钮相关联,并对每个按钮点击执行特定操作。
我的按钮有一个ASCII艺术标题。因此,在这种情况下,创建常见的IBAction并基于按钮标题执行操作将不是一个简单的选择。
其他选择可以是什么?
如何将按钮点击事件与特定按钮相关联?
答案 0 :(得分:0)
我认为您可以使用UIView的标记属性。
我的节目可能就像是。
- (NSInteger)encodeTagForButtonID:(NSString *)buttonID;
- (NSString *)decodeButtonIDFromEncodedTag:(NSInteger)tag;
当我创建UIButton时,我将按钮的ID编码为标记。 buttonID可能是有意义的东西,或者它只是一个整数,就像定义的值一样。行动签名可以是以下形式: - (void)buttonAction:(id)sender; ,我可以从发件人标记值>
修改强>
例如,在UITableView的数据源方法中。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
/// new an autoreleased cell object
}
// Configure cell
cell.tag = [self encodeTagWithIndexPath:indexPath];
return cell;
}
当我触摸此单元格时,我会从标记中检索indexPath。
UIButton是UIView的子类,因此它也有标记。例如,我制作了一个自定义的actionSheet,它包含一个UIButtons列表。当我按下UIButton时,我需要知道我按下了哪个按钮。因此,我将行信息分配给标记。
NSArray *buttonListInActionSheet = ....; ///< UIButton array, a button per row.
for (int idxBtn = 0; idxBtn < [buttonListInActionSheet count]; ++idxBtn) {
UIButton *btn = [buttonListInActionSheet objectAtIndex:idxBtn];
btn.tag = (100 + idxBtn);
}
当我触摸按钮时,我可以通过
获取行信息- (void)buttonTouched:(id)sender {
UIButton *btn = (UIButton *)sender;
NSInteger idxBtn = (btn.tag - 100);
}