在iOS应用中实施MVC模式的正确方法是什么?

它在

我正在尝试制作一个干净的MVC项目。那么,使用NSNotificationCenter的观察者进行UIView和ViewController之间的通信是好事还是坏主意?

例如,在CustomView.mi中创建一个按钮:

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

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

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

- (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模式的正确方法是什么?

卡勒姆·博迪(Callum Boddy)

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

我在这里使用的模式是委派。

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

在标题顶部:

@protocol CustomViewDelegate : NSObject

- (void)customViewDidSelectButton;

@end

在界面中。

@interface CustomView : NSObject

---

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

---

@end

在执行中:

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

在视图控制器中观察

在实现文件中添加<CustomViewDelegate>(将TableViewDelegate等放置在同一位置。)

然后在创建CustomView集合将其委托给self。

实现委托方法:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

实施CupertinoActionSheet的正确方法是什么?

MVC 模式的正确方案是什么?

在MySQL模式中存储此数据的正确方法是什么?

在JSON模式中定义键值对的正确方法是什么

在Vue.js 2.0中的v模型上实施格式化的正确方法是什么

在vega-lite中实施自定义点击处理程序的正确方法是什么

在 Flutter 中应用 `const` 的正确方法是什么?

在Django中链接应用的正确方法是什么?

用Redux实施事务的正确方法是什么

实施动画边框底部的正确方法是什么?

对案例类值实施约束的正确方法是什么

重置模式内容的正确方法是什么?

在iOS 8中处理方向更改的“正确”方法是什么?

在iOS中实施表格的最佳做法是什么

从MySQL数据库向iOS应用获取私有数据的正确方法是什么?

当我的应用在iOS上终止时,保存NSUserDefaults的正确方法是什么

在iOS应用中将少量数据保存到磁盘的最正确方法是什么?

Microsoft在OWIN中实施扩展方法CreatePerOwinContext的目的是什么

使用Javascript中的模块模式调用内部函数的正确方法是什么

Typescript / ES6中单例模式的正确方法是什么?

我的Android服务并非一直都在运行。当我重新打开应用程序时,它熄灭。实施我的服务的正确方法是什么?

在Swift中从NSDocument应用程序中的行参数打开文件的正确方法是什么?

在flutter应用中添加时间选择器的正确方法是什么?

将文件包含到android应用中的正确方法是什么?

在异步应用程序中定义解析/拒绝的正确方法是什么

在企业Java应用程序中创建线程的正确方法是什么

应用程序启动后,在服务器中创建文件的正确方法是什么?

在Spring Web应用程序中创建数据源的正确方法是什么?

在SwiftUI中更新ScrollView的正确方法是什么?(MacOS应用程式)