《iOS 编程》6. 视图控制器

6.5 添加本地通知

书中没有提到申请通知权限,方法如下

add this code, it will show a alert view to ask user for permission.

1
2
3
4
5
6
7

if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound|UIUserNotificationTypeBadge
categories:nil]];
}


6.7 与视图控制器及其视图进行交互

视图控制器的生命周期方法(lifecycle method):

  • application:didFinishLaunchingWithOptions:在该方法中设置和初始化应用窗口的根视图控制器。该方法只会在应用启动完毕后调用一次。

  • initWithNibName:bundle:该方法是UIViewController的指定初始化方法,创建视图控制器时,就会调用该方法。请注意,某些情况下,需要在同一个应用中创建多个相同的UIViewController子类对象,每次创建一个该类的对象时,都会调用一次该类的initWithNibName:bundle:方法。

  • loadView:可以覆盖该方法,使用代码方式设置视图控制器的view属性。

  • viewDidLoad可以覆盖该方法,设置使用NIB文件创建的视图对象。该方法会在视图控制器加载完视图后被调用。

  • viewWillAppear:可以覆盖该方法,设置使用NIB文件创建的视图对象。该方法和

  • viewDidAppear:会在每次视图控制器的view显示在屏幕上时被调用;相反,

  • viewWillDisappear:和viewDidDisappear:方法会在每次视图控制器的view从屏幕上消失时被调用。

6.9 中级练习:控制逻辑

查文档不懂,这是个大问题,有待提高看文档具体怎么组织的能力。Stack Overflow 的答案运行崩溃,没有理解原理,mainSegmentControl: 方法没有声明。最后还是去 BNR论坛 找到了答案。

熟悉文档浏览 UIColor,其实也是不很精通颜色,但是还是大部分看懂了,也了解了目录结构和对应文本的样式。

GWHypnosisViewController.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"GWHypnosisViewController loaded its view.");

// 初始化UISegmentedControl,设置大小和颜色
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:@[@"Red", @"Green", @"Blue"]];
segmentedControl.frame = CGRectMake(0, 0, 250, 50);
segmentedControl.tintColor = [UIColor blackColor];

// 注册UISegmentedControl
[segmentedControl addTarget:self.view
action:@selector(mainSegmentControl:)
forControlEvents: UIControlEventValueChanged];
// 添加到视图
[self.view addSubview:segmentedControl];

}

GWHypnosisView.h

1
2
3

- (void)mainSegmentControl:(UISegmentedControl *)segment;

GWHypnosisView.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// mainSegmentControl: 方法用来接受 UISegmentedControl 发的消息
- (void)mainSegmentControl:(UISegmentedControl *)segment
{

if(segment.selectedSegmentIndex == 0)
{
// action for the first button (Current or Default)
self.circleColor = [UIColor redColor];
}
else if(segment.selectedSegmentIndex == 1)
{
// action for the second button
self.circleColor = [UIColor greenColor];
}
else if(segment.selectedSegmentIndex == 2)
{
// action for the third button
self.circleColor = [UIColor blueColor];
}

}

项目代码保存在我的 GitHub: iOSProgramming4edSolutions