【问题标题】: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之外的文本。

标签: c# ios uitableview xamarin xamarin.ios


【解决方案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% 正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 2021-11-05
  • 2018-04-19
  • 2015-12-03
  • 2013-03-29
相关资源
最近更新 更多