如何在iPhone SDK中动态添加按钮和滚动视图?

时间:2011-01-18 13:18:59

标签: iphone cocoa-touch ios4 uiscrollview uibutton

在我的iPhone应用程序中,我必须动态地将按钮与scrollView一起放置。

现在我需要按钮Click事件与每个按钮相关联,并对每个按钮点击执行特定操作。

我的按钮有一个ASCII艺术标题。因此,在这种情况下,创建常见的IBAction并基于按钮标题执行操作将不是一个简单的选择。

其他选择可以是什么?

如何将按钮点击事件与特定按钮相关联?

1 个答案:

答案 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);
}