在ios中调用另一个UIVIew后如何在tableview中禁用UIButton

Posted

技术标签:

【中文标题】在ios中调用另一个UIVIew后如何在tableview中禁用UIButton【英文标题】:How to disable UIButton in tableview after called another UIVIew in ios 【发布时间】:2013-08-15 04:35:58 【问题描述】:

我有 1 个UITableView 在每一行中有多个 UIButton(名为“Open”按钮,带有不同的标签),我为它们设置了标签。现在,单击每一行中的任何按钮后,它将显示一个UIView (detailView)。在 detailView 上有 1 个“提交”按钮。我想当用户点击“提交”按钮时,选择标签的“打开”按钮被禁用。我怎样才能做到这一点?我使用了这段代码:

使用多个“打开”按钮创建表格视图的代码:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    NSString *CellIdentifier = [NSString stringWithFormat:@"%d,%d",indexPath.section,indexPath.row];

    UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        UIButton *market = [UIButton buttonWithType:UIButtonTypeCustom];
        [market addTarget:self action:@selector(marketPressedAction:) forControlEvents:UIControlEventTouchDown];

        [market setTag:3000];
        [market setFrame:CGRectMake(200, 6, 30, 30)];
        [cell.contentView addSubview:market];

    

    marketButton = (UIButton *)[cell.contentView viewWithTag:3000];
    [marketButton setTag:indexPath.row];


    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    _tableView.contentInset = UIEdgeInsetsMake(0, 0, 100, 0);

    return cell;

点击“打开”按钮时的代码:

    - (void)marketPressedAction:(id)sender


    UIButton *button = (UIButton *)sender;
    buttontag = button.tag;
    NSLog(@"Market button click at row %d",buttontag);

    if ([sender isSelected]) 
        [sender setImage:[UIImage imageNamed:@"Marketplace.png"] forState:UIControlStateHighlighted];
        [sender setSelected:NO];
    
    else 

            [sender setImage:[UIImage imageNamed:@"MarketplaceSelect.png"] forState:UIControlStateSelected];
            [sender setSelected:YES];
        
    

【问题讨论】:

【参考方案1】:

如果您希望在单击提交按钮后禁用“打开”按钮,则应使用委托

【讨论】:

【参考方案2】:
UIButton *btn = (UIButton *)sender;
btn.enabled = NO;

在按钮点击方法中试试这个

【讨论】:

当用户点击详细视图上的“提交”按钮时,打开按钮已被禁用,而不是禁用“提交”按钮 您可以在点击打开按钮时获取提交按钮的标签并设置禁用。【参考方案3】:

已编辑:marketPressedAction 参数id 更改为UIButton * 并编写以下代码

-(void)marketPressedAction:(UIButton *)sender


    [sender setImage:[UIImage imageNamed:@"Marketplace.png"] forState:UIControlStateHighlighted];
    [sender setImage:[UIImage imageNamed:@"MarketplaceSelect.png"] forState:UIControlStateSelected];

    /// Here set you image ////////////////
    [sender setImage:[UIImage imageNamed:@"myCustome.png"] forState:UIControlStateNormal];

    [self createMarketPlaceForm]; // call detailView

    sender.enabled = NO;
    sender.userInteractionEnabled = NO;


【讨论】:

marketPressedAction 被调用以显示详细视图,您的代码不能为打开按钮设置禁用。谢谢 @user2669713 打开按钮点击方法在哪里??用这个方法写这段代码。 - (void)marketPressedAction:(id)sender UIButton *button = (UIButton *)sender;按钮标签 = 按钮标签; NSLog(@"市场按钮点击第 %d 行",buttontag); if ([sender isSelected]) [sender setImage:[UIImage imageNamed:@"Marketplace.png"] forState:UIControlStateHighlighted]; [发件人设置选择:否]; else [self createMarketPlaceForm]; // 调用 detailView [sender setImage:[UIImage imageNamed:@"MarketplaceSelect.png"] forState:UIControlStateSelected]; [发件人 setSelected:YES]; 在打开按钮单击方法中,我调用一个函数来显示 DetailView,在用户单击 DetailView 上的“提交”按钮后,DetailView 消失并且打开按钮被禁用,但我不知道该怎么做? 谢谢它的工作,但如果我想改变另一个图像不禁用??

以上是关于在ios中调用另一个UIVIew后如何在tableview中禁用UIButton的主要内容,如果未能解决你的问题,请参考以下文章

在IOS中将动作传递给一个uiview到另一个

如何使用动画概念将一个 UIview 推送到 ios 中的另一个 UIview?

如何在解除第二个控制器后调用第一个控制器中的函数

iOS从另一个视图的一侧滑动一个UIView(菜单)

使用 Table 加载 UIView 时无法从其 dataSource 中获取单元格

如何从 Table Cell 返回另一个 UIViewController