第03章 实现基本交互

MVC框架

1.模型Model:保存应用程序数据的类
2.视图View: 包括窗口,控件等一系列与用户交互的类
3.控制器Controller:把模型和数据绑定在一起的代码。
 

547270.png

 
 
MVC的目标:
1.最大限度的分离这三类代码,使程序中类型清晰,知道自己该干什么
2.帮助确保代码的最大可重用性,否则实现了按钮的类,要在点击时进行特定的计算,那该按钮则只能在此应用中实用。
输出口
1.控制器可以通过一种名为输出口的特殊属性,来与nib文件中的对象关联,可以把输出口理解为指向nib文件中对象的指针。
 

@property (nonatomic, weak) IBOutlet UILabel *label;

 

#ifndef IBOutlet

#define IBOutlet

#endif

 

可见,IBOutlet什么都不是,它唯一的作用就是告诉Xcode,这个属性会与nib文件中的对象进行关联。

 

苹果将默认的编译器从GCC改为LLVM之后,就不再需要为属性声明相应的实例变量了,对于一个属性来说,如果LLVM找不到与之对应的实例变量,它就会自动创建一个实例变量。

 
动作方法
可以对nib文件中的界面对象进行设置,以触发控制器类中的某些特殊方法,这种方法称为动作方法Action Method
 
-(IBAction) doSomething:  (id) sender;
 
IBAction实际为void,不返回任何值。但是会告诉Xcode,此方法会被nib文件中的某个控件触发。
 
动作方法,要么不接受任何参数,要么只接受一个参数,sender指向触发该动作的控件对象。
 
 
 
设计用户界面:
IOS Human Interface Guidelines(HIG)人机交互指南
做界面设计的时候,应该遵循该指南。
 
辅助视图快捷键:command+option+enter
 
通过Control键+鼠标拖拽的方法,创建outlet和action
933693.png
 
connection:关联类型,outlet或action或outlet  collection
 
351632.png
 
 
如果不使用IB,建立控件的outlet,atcion了?
1.对于控件,直接将其添加为controller的view的子视图即可,addSubView
则,此时不需要IBoutlet,在controller中,可通过self.view的viewWithTag方法,获得其子控件。
或者,就在controller中定义控件指针,在控件初始化并add进controller的时候,设置此指针。
 
2.对于action,则是使用addTarget:action:forControlEvents:方法,来定义动作。
 
- (void)addTarget:(id) target 
           action:(SEL) action 
 forControlEvents:( UIControlEvents) controlEvents
 
 [btn addTarget:self action:@selector(changToMoreTab) forControlEvents:UIControlEventTouchUpInside];
    [viewController1.view addSubview:btn];
Adds a target and action for a particular event (or events) to an internal dispatch table.
 
样式文本 NSAttributedString
 
通过此类,可对字符串添加格式信息,比如字体和段落对齐。
可以在整个字符串上使用这些元数据,也可以对字符串的不同部分使用不同的属性。
 
UILabel有以下两种不同的属性:
_statusLabel.text
_statusLabel.attributedText
 
初始化字典的方法
661257.png
 类似的 NSArray*  array = @[object, ….]
 
样式文本的初始化,设置

    NSMutableAttributedString *styledText =

             [[NSMutableAttributedString alloc]initWithString:plaintText];

    [styledText setAttributes:dictionary range:nameRange];

 
 
应用程序委托
委托:负责为其他对象处理特定任务的对象。不同对象之间通讯的一种方式。比如view经常将controller设置为其委托。
每个app都有且仅有一个UIApplication实例,它负责应用程序的运行循环,以及处理应用程序级的功能。
 
47000.png 108078.png
 
NSStringFromClass( [AppDelegate class] );
 
+ (Class)class
 
 
此方法,其实就是将BIDAppdelegate类设置为UIApplication的委托。
这样BIDAppdelegate中就可以响应应用程序生命周期中,不同状态时候触发的响应
比如启动,进入后台,退出等等。。。
 

@interface BIDAppDelegate : UIResponder <UIApplicationDelegate>

此委托类,需要实现UIApplicationDelegate协议。
 

- (BOOL)application:(UIApplication *)application

  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.

    self.viewController = [[BIDViewController alloc] initWithNibName:@"BIDViewController" bundle:nil];

    self.window.rootViewController = self.viewController;

    [self.window makeKeyAndVisible];

    return YES;

}

 

 

应用程序启动后,会进入此委托方法,
以上代码为:设置委托的window,设置委托的窗口的根视图控制器,显示委托的窗口。
 
 
以上代码,在使用single view template模版的时候,都会自动创建好。
 
 
注意理解协议,协议可以理解为c++中的虚接口,可以通过继承,修改虚接口的方式,改变动作行为。
但是在oc中,则是采用的协议委托,通过在委托中实现不同的协议方法,来响应不同的行为。
 
 
UIApplication
UIApplicationDelegate
UIWindow
ViewController
rootViewController
 
 
 
 
 
 

转载于:https://www.cnblogs.com/wildathearthy/p/4172488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值