- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 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/
我的应用将 SceneKit 内容的“页面”与图像和文本交替。当我从图像页面前进到新的 SceneKit 页面时,前一个 SceneKit 页面中的内容会短暂显示,然后被新内容替换。时髦。 我只使用一
我正在尝试处理(在 C# 中)包含一些数字数据的大型数据文件。给定一个整数数组,如何对其进行拆分/分组,以便如果下一个 n(两个或更多)是负数,则前一个 n 元素被分组。例如,在下面的数组中,应该使用
刚接触promises,研究过。所以我的代码和我的理解: sql.connect(config).then(function(connection) { return connection.req
目前我在 if (roobaf) block 中有一些代码,这取决于 foo 和 bar 是否为假。我可以在 block 内再次检查这些条件,但感觉像是不必要的代码重复。 if (foo) {
我是一名优秀的程序员,十分优秀!