在Objective-C没有nib文件是MVC有逻辑与视图在同一类一起



当我在Objective-C中编程地工作时,没有nib文件,并在my:

中具有逻辑

appViewController。m

在同一个类中,视图和视图元素发生了什么?这违背MVC模式吗?

我必须创建另一个类并通知两个类吗?

由你决定!如果你想要分离层(M,V,C),你可以通过编程方式创建你自己的视图,通过使用复合设计模式,在你的UIView子类中构建它,通过从你的控制器中删除绘图代码。这是…

    你创建了一个"CustomCompositeView"扩展了UIView
  • layoutSubview(继承自UIView)你将绘制你所有的UI元素
  • 在你的CustomViewController你将使用loadView:
  • 显示你的视图
代码:

- (void)loadView
{
CustomCompositeView *mainView = [[CustomCompositeView alloc] initWithFrame:aFrame];
[self setView:mainView];
[mainView release]; // remove this line if you are using ARC!
}

从技术上讲,它违背了MVC模式。你的V和C组合成一个物体。你可以把处理布局和绘图的代码分离到一个单独的UIView子类中。然后用loadView:

加载它
// MyViewController.m
- (void)loadView {
    MyView* myView = [[[MyView alloc] init] autorelease];
    myView.delegate = self;
    self.view = myView;
}

#pragma mark - MyViewDelegate Methods
- (void)myViewSaveButtonWasPressed:(MyView *)myView {
    // do something
}

为了在视图和视图控制器之间通信,你可以定义一个委托协议。

// MyView.h
@class MyView;
@protocol MyViewDelegate <NSObject>
- (void)myViewSaveButtonWasPressed:(MyView *)myView;
@end
@class MyView : NSObject
@property (nonatomic, assign) id<MyViewDelegate> delegate;
// ...

当一个按钮在视图中被按下(或沿着那些行的其他东西)时,将其传递给委托。ViewController应该遵从委托方法,并以这种方式处理实际的逻辑。

最新更新