如何从 iPhone 中的子视图更新超级视图 UILabel 文本?

Posted

技术标签:

【中文标题】如何从 iPhone 中的子视图更新超级视图 UILabel 文本?【英文标题】:How to update superview UILabel text from subview in iPhone? 【发布时间】:2013-05-16 06:15:01 【问题描述】:

我有两个类,Client_MainClient_demo。 在 Client_Main 类中,我使用了一个显示 client name 的标签,单击 Client_Main 类中的按钮后,我添加了 Client_demo 类作为 子视图。现在,当我单击 Client_demo 类上的按钮时,我想更改 Client_Main 类标签的文本。

所以请建议我如何做到这一点。

【问题讨论】:

看这里roostersoftstudios.com/2011/04/12/… 你应该通过响应者链向你的视图控制器发送一个动作消息。然后,您的视图控制器应根据您的操作消息配置您的视图。 【参考方案1】:

在superview中为UILabel添加一个唯一标签

[superview subviews]; 返回父视图中的所有视图对象,并从中获取具有您设置的唯一标签的视图对象,就是这样

 for (UILabel *label in [yourSubview.superview]) 
        if (label.tag==uniqueID) 
            //Here is your uilabel instance ,do what you want
        
    

正确的方式:委托

只需在超级视图上创建一个具有实现的委托方法,以使用其实例更改标签。 从子视图类中触发委托方法

more on delegation

【讨论】:

【参考方案2】:

有两种方法可以从子视图更新超级视图 1-通过 NSNotification 在这种方法中,您必须在 superview calass 中创建通知并像这样设置观察者

//you can write this code in viewDidLoad 

  [[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(notificationEventForUpdateData:)   name:@"NotificationForUpdateHomeScreenData" object:nil];

and define this method notificationEventForUpdateData in same superview class in this method    you can update label textfield etc whatever you want 

 -(void) notificationEventForUpdateData: (NSNotification *)notification
 
     self.label.text=@"newvalue";
 

从子视图中,您必须从要更新的操作(内部方法)发布此通知,例如按钮单击或表格视图的单元格选择等 像这样

   [[NSNotificationCenter defaultCenter]
 postNotificationName:@"NotificationForUpdateHomeScreenData" 

2-方式是正确的委托

【讨论】:

以上是关于如何从 iPhone 中的子视图更新超级视图 UILabel 文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iPad 中的子视图更新 Superview?

如何阻止从超级视图到子视图的手势?

如何将数据从父模型类传递到 SwiftUI 中的子视图

如何检测拖动到那里的子视图中的触摸(或获取哪个子视图位于其父视图中的点击下方的最快方法)

如何使以编程方式生成的子视图符合超级视图(iOS)的边界?

从 ui.router 中的子状态控制父范围变量 [重复]