gpt4 book ai didi

ios - 在 iOS 应用程序中实现 MVC 模式的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-28 21:48:04 24 4
gpt4 key购买 nike

我正在尝试创建一个干净的 MVC 项目。那么,使用 NSNotificationCenter 的观察器在 UIView 和 ViewController 之间进行通信是好是坏?

例如在 CustomView.m 中我做了一个按钮:

- (void) makeSomeButton{
....
[bt addTarget:self action:@(buttonWasClicked) forControlEvents:UIControlEventTouchDragInside];
...
}

- (void) buttonWasClicked {
[[NSNotificationCenter defaultCenter] postNotificationName:@"buttonWasClicked" object:nil];
}

在 viewCotroller.m 中,我在初始化部分添加了观察者:

- (void)viewDidLoad {  // 
[self.view addSubview: [[CustomView alloc] initWithFrame ...]];
.....
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@(buttonWasClicked) name:@"buttonWasClicked" object:nil];
.....
}

then
- (void) buttonWasClicked{
// button was clicked in customView so do something
}

如果不正确,请解释在 iOS 应用程序中实现 MVC 模式的正确方法是什么?

最佳答案

不,在这种情况下不应使用通知中心。

我在这里使用的模式是委托(delegate)。

在您的 CustomView 中,使用某种方法声明一个协议(protocol),

在标题的顶部:

@protocol CustomViewDelegate : NSObject

- (void)customViewDidSelectButton;

@end

在界面中。

@interface CustomView : NSObject

---

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

---

@end

在实现中:

- (void) buttonWasClicked {
[self.delegate customViewDidSelectButton];
}

在View Controller中观察

在实现文件中添加<CustomViewDelegate> (你把 TableViewDelegate 等放在同一个地方。)

然后当您创建 CustomView set 是委托(delegate)给自己。

实现委托(delegate)方法:

 - (void)customViewDidSelectButton {
// button was clicked in customView so do something
}

关于ios - 在 iOS 应用程序中实现 MVC 模式的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29363931/

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