Client_MainとClient_demoの 2 つのクラスがあります。
Client_Mainクラスでは、クライアント名を示すラベルを使用しており、 Client_Mainクラスのボタンをクリックした後、Client_demoクラスをサブビューとして追加しました。Client_demoクラスのボタンをクリックすると、 Client_Mainクラス ラベル のテキストを変更したいと思います。
だから、これを行う方法を教えてください。
Client_MainとClient_demoの 2 つのクラスがあります。
Client_Mainクラスでは、クライアント名を示すラベルを使用しており、 Client_Mainクラスのボタンをクリックした後、Client_demoクラスをサブビューとして追加しました。Client_demoクラスのボタンをクリックすると、 Client_Mainクラス ラベル のテキストを変更したいと思います。
だから、これを行う方法を教えてください。
UILabel
スーパービューに固有のタグを付ける
[superview subviews];
スーパービュー内のすべてのビュー オブジェクトを返し、そこから、設定した一意のタグを持つオブジェクトを取得します。
for (UILabel *label in [yourSubview.superview]) {
if (label.tag==uniqueID) {
//Here is your uilabel instance ,do what you want
}
}
また
適切な方法:委任
スーパービューに実装されたデリゲートメソッドを作成して、そのインスタンスを使用してラベルを変更するだけです。サブビュー クラスからデリゲート メソッドを起動する
サブビュー 1 からスーパービューを更新するには 2 つの方法があります。このアプローチでは NSNotification を介して、スーパービュー 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"
双方向は適切な委任です