gpt4 book ai didi

iphone - 如何访问 UINavigationController 中的先前 View 元素

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:28 25 4
gpt4 key购买 nike

我有一个 UINavigationController,我在其中加载不同的 View Controller 。我想知道如何访问我以前 View 的元素(如标签等)。这是一个例子。

View AmyLabel.text = @"第一 View ";

(用户移动到 View B)

View B(用户输入了一条消息,我需要在 View A 中显示)类似于 ViewA.myLabel.text = @"user entered message"

我尝试了很多东西,但没能找到任何非常有用的东西。请帮助..

我正在使用没有 ARC 和 Storyboard的 Xcode 4。

谢谢山姆


编辑:

我想更新 View A 的 viewController 中声明的属性,而不是直接更新标签。我的标签使用该属性进行更新。就像在推送 viewController 时,我们可以传递如下值。

ViewA *myView = [[ViewA alloc] init];
myView.title = @"View B" ;
myView.tableView.tag = 3;
myView.myTextView.text = @"Some Text";
[self.navigationController pushViewController:myView animated:YES];
[myView release];

有什么方法可以在弹出 ViewB 并返回到 ViewA 时将这些值传递给 ViewA 的 ViewController 的属性?

实际情况如下:用户可以选择在 textView 中编写消息,也可以使用预定义的模板。如果他单击模板按钮,他将被带到预定义模板列表,他可以在其中选择任何预定义消息。现在我希望当用户单击任何预定义消息时,包含预定义消息列表的 View 会弹出,并且他选择的消息会自动填充到主视图的 textView 中。实现这一目标的最佳方法是什么?

TIA山姆

最佳答案

您应该将 AViewController 设置为 BViewController 的委托(delegate),这样您就可以在特定事件后向其发回消息。使用委托(delegate)还可以更好地解耦您的 ViewController。

在您的 BViewController 中,定义如下协议(protocol):

BViewController.h :

@protocol BViewControllerDelegate <NSObject>
- (void)viewB:(UIViewController *)didEnterMessage:(NSString *)message;
@end

并添加一个委托(delegate)属性:

@property (nonatomic, weak) id <BViewControllerDelegate> delegate;

当用户在您的 BViewController 中输入消息并点击弹出 BViewController 以显示给 AViewController 的按钮时:

- (IBAction)messageEntered {
if ([self.delegate respondsToSelector:@selector(viewB:didEnterMessage:)]) {
[self.delegate viewB:self didEnterMessage:self.yourTextField.text];
}
}

你的 AViewController 应该像这样实现 BViewControllerDelegate 协议(protocol):

AViewController.h :

@interface AViewController <BViewControllerDelegate>

当您的 AViewController 创建 BViewController 时,它应该在呈现之前将自己设置为其委托(delegate)。可能看起来像这样:

BViewController *bvc = [[BViewController alloc] init…];
bvc.delegate = self;

最后,您的 AViewController 应该实现 viewB:didEnterMessage: 方法:

- (void)viewB:(UIViewController *)didEnterMessage:(NSString *)message {
self.myLabel.text = message;
}

恕我直言,这是最干净的方法。

关于iphone - 如何访问 UINavigationController 中的先前 View 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9274376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com