单击表格视图中的按钮时如何更改表格视图外部的标签文本

Posted

技术标签:

【中文标题】单击表格视图中的按钮时如何更改表格视图外部的标签文本【英文标题】:How to change label text that is outside the tableview when a button in the tableview is click 【发布时间】:2016-03-07 10:19:26 【问题描述】:

问题是我有一个带有自定义单元格的表格视图。在牢房里,我有一个按钮。单击按钮时,它应该更改表格视图之外的标签文本。

编辑: 我试图更改的标签文本在不同的视图上。 ViewController 有一个表格视图和一个标签视图。在 tableview 里面是一个按钮,当它被点击时,它会改变标签的视图文本。

CustomCell 和 TableSource:

namespace Testing.ios

    public partial class CustomCell : UITableViewCell
    

        // Code omitted

        public class TableSource : UITableViewSource
          
            ViewController vc = new ViewController();

            public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
            
                var cell = tableView.DequeueReusableCell (CustomCell.Key) as CustomCell;

                if (cell == null) 
                
                    cell = new CustomCell ();
                    var views = NSBundle.MainBundle.LoadNib("CustomCell", cell, null);
                    cell = Runtime.GetNSObject( views.ValueAt(0) ) as CustomCell;
                

                cell.btn.TouchUpInside += (object sender, EventArgs e) => 
                     
                    // Change label that is outside tableview
                    vc.updateLabel();
                ;

                // Code omitted

                return cell;
            
        
    

视图控制器:

namespace Testing.iOS

    public partial class ViewController : UIViewController
        
        public ViewController () : base ("ViewController", null)
        
        

        public override void ViewDidLoad ()
        
            base.ViewDidLoad ();

            tableView.RegisterNibForCellReuse (CustomCell.Nib, "CustomCell");
            tableView.Source = new CustomCell.TableSource();
        

        public override void DidReceiveMemoryWarning ()
        
            base.DidReceiveMemoryWarning ();
        

        public void updateLabel()
        
            label.Text = "testing";
        
    

【问题讨论】:

那么您面临什么问题,从问题来看,更改按钮操作中的标签文本非常直接。 问题是:点击tableview中的按钮时,无法更改tableview之外的文本。 【参考方案1】:

使用协议和委托。 首先在CustomCell 类中编写一个CustomCellDelegate 协议,方法为updateLabel(),并将self 作为参数之一传递。

-(void)updateLabelForCell:(UITabelViewCell *)cell;

并在updateLabel()方法中,调用委托方法

[self updateLabelForCell:self];

然后在ViewController 类中,实现委托方法。基于调用更新标签的函数。 将您的 ViewController 设置为 tableviewcell 的委托。

【讨论】:

你能不能把最后一段解释一遍,谢谢。 我的意思是在cellForRowAtIndexpath: 方法中设置cell.delegate = self。您可以获取有关他的单元格的信息,因为它也在委托方法中传递【参考方案2】:

在 cellForRowAtIndexPath 方法中添加以下代码

[CustomCell.buttonOutlet addTarget:self action:@selector(BtnClicked:) forControlEvents:UIControlEventTouchUpInside];

然后在 BtnClicked 方法中处理您的逻辑。

-(void)BtnClicked:(UIButton *)sender

       labelOutlet.text = @"new text";


【讨论】:

这不起作用。标签不在 tableviewcell 中 你试过这个代码吗?标签是否在tableview之外都没有关系。 您的代码在 Objective-C 中,而我使用的是 C#。我无法将第一行代码翻译成 C# 它是否在 tableview 之外很重要。我无法从 TableSource 调用 label.Text 原因 label.Text 在 ViewController 中 嘿 @MartDavious 我只能用 Objective C 或 Swift iOS 语言回答你。我不知道 C#。它适用于 iOS 100% 正确

以上是关于单击表格视图中的按钮时如何更改表格视图外部的标签文本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局来调整表格视图单元格中的视图大小?

如何通过单击更改集合视图单元格中的标签颜色

如何固定表格视图中自定义单元格文本字段的标签值?

如何从“更多”标签栏项目中的编辑检测标签栏项目更改?

表格视图按钮索引单元格

使用自动布局表格视图时如何增加表格视图单元格中的标签高度(取决于文本)?