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