我试图在有人在模态视图中进行更改后更新父视图中的UILabel。因此,在他们单击“保存”后...新输入的值将更改父视图控制器上显示的文本。
但是,我似乎无法让UILabel刷新新输入的值。
关于我可以尝试的任何想法?我已经尝试了一些东西,但由于视图已经加载,没有任何东西得到“刷新”。
谢谢!
答案 0 :(得分:8)
有很多方法可以做到这一点。一种方法是使用NSNotificationCenter
能够在不同的类之间进行调用。因此,在父视图中,您将拥有一个负责更新的函数(让我们称之为updateLabel),您将执行以下操作:
- (void) updateLabel
{
yourLabel.text = @"what you need";
}
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLabel) name:@"DoUpdateLabel" object:nil];
}
现在在其他视图中,只需在保存按钮中发布通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"DoUpdateLabel" object:nil userInfo:nil];
修改强> 我必须在这里提到两件事:
NSNotificationCenter
[[NSNotificationCenter defaultCenter] removeObserver:self];
醇>
答案 1 :(得分:3)
详细说明我的评论。这就是我如何实现委托方法来更新标签。
在父视图控制器的标题中:
#import "ModalViewController.h"
@interface ViewController : UIViewController <ModalViewControllerDelegate>
/* This presents the modal view controller */
- (IBAction)buttonModalPressed:(id)sender;
@end
在实施中:
/* Modal view controller did save */
- (void)modalViewControllerDidSave:(ModalViewController *)viewController withText:(NSString *)text
{
NSLog(@"Update label: %@", text);
}
/* Prepare for segue */
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"modalSegue"])
{
ModalViewController *mvc = (ModalViewController *) segue.destinationViewController;
mvc.delegate = self;
}
}
/* Present modal view */
- (IBAction)buttonModalPressed:(id)sender
{
[self performSegueWithIdentifier:@"modalSegue" sender:self];
}
在这里,您可以在顶部看到委派方法。
模态视图控制器的标题将包含如下的委托协议:
@protocol ModalViewControllerDelegate;
@interface ModalViewController : UIViewController
@property (nonatomic, weak) id <ModalViewControllerDelegate> delegate;
- (IBAction)buttonSavePressed:(id)sender;
@end
@protocol ModalViewControllerDelegate <NSObject>
- (void)modalViewControllerDidSave:(ModalViewController *)viewController withText:(NSString *)text;
@end
模态视图控制器的实现将包含与此类似的方法:
/* Save button was pressed */
- (IBAction)buttonSavePressed:(id)sender
{
if ([self.delegate respondsToSelector:@selector(modalViewControllerDidSave:withText:)])
[self.delegate modalViewControllerDidSave:self withText:@"Some text"];
[self dismissModalViewControllerAnimated:YES];
}
按下保存按钮时,将通知代理人,并通过委派方法发送文本视图中的文本。
答案 2 :(得分:2)
:
ParentViewController:
func updateLabel() {
yourLabel.text! = "what you need"
}
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.updateLabel), name: "DoUpdateLabel", object: nil)
}
在OtherView中:
@IBAction func closePopUp(sender: AnyObject) {
NSNotificationCenter.defaultCenter().postNotificationName("DoUpdateLabel", object: nil, userInfo: nil)
}