亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

五分鐘搭建App設置頁面

2019-11-14 18:11:18
字體:
來源:轉載
供稿:網友

原文出處: 陳燕翔(@燕翔de專注)   歡迎分享原創到伯樂頭條

本節主題(Storyboard/模型思想搭建設置頁面)

  • 設置(Setting)頁面的搭建(實現效果)
  • 開發方式(這里提供兩種,個人感覺第二種重用性較高,推薦使用。但第一種較為簡單,視開發需求選擇)
    • (1)純代碼 + StoryBoard混合 開發
    • (2)純代碼 + 模型 思想
  • 設置頁面的搭建
  • 假設你已經搭建出了這個基本框架
    《十分鐘搭建App主流框架》
    但這畢竟是個空殼,下面讓我們把設置頁面簡單的搭建一下吧
  • 注:本文僅僅提供簡略的搭建方式與實現思路,更加詳細的功能需要讀者深入探究。

方式一(純代碼 + StoryBoard混合 開發)

  • 第一步
  • 新建StoryBoard文件,注意:命名與控制器相同
 
  • 第二步
  • 往StoryBoard一頓狂拖,你懂的

 
  • 注意點:記得勾選第一個頁面 is Initial View Controller
 
  • 設置TableViewCell的樣式

 

  • 第三步(回到CYXTabBarController.m文件)
  • 這里只需要改第四個控制器的代碼,由于是從Storyboard中加載的控制器,與前三個不同。
 

 

 
 
 
 
 
Objective-C
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
*  添加所有子控制器
*/
- (void)setUpAllChildViewController{
    // 1.添加第一個控制器
    CYXOneViewController *oneVC = [[CYXOneViewController alloc]init];
    [self setUpOneChildViewController:oneVC image:[UIImage imageNamed:@"tab_home_icon"] title:@"首頁"];
 
    // 2.添加第2個控制器
    CYXTwoViewController *twoVC = [[CYXTwoViewController alloc]init];
    [self setUpOneChildViewController:twoVC image:[UIImage imageNamed:@"js"] title:@"技術"];
 
    // 3.添加第3個控制器
    CYXThreeViewController *threeVC = [[CYXThreeViewController alloc]init];
    [self setUpOneChildViewController:threeVC image:[UIImage imageNamed:@"qw"] title:@"博文"];
 
    // 4.添加第4個控制器
    // 4.1 初始化并從Storyboard中加載控制器
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"CYXFourViewController" bundle:nil];
 
    // 4.2 關聯storyBoard與CYXFourViewController
    CYXFourViewController *fourVC = [storyBoard instantiateInitialViewController];
 
    [self setUpOneChildViewController:fourVC image:[UIImage imageNamed:@"user"] title:@"設置"];
}

 

  • 設置頁面已經出來了
 

 

方式二(純代碼 + 模型 開發)
  • 第一步 (新建模型文件)
 
  • 第二步 (模型的設計)
  •  組模型設計(CYXGroupitem.h),分析每一組的所有元素:比如有頭部標題,尾部標題,還有若干行Cell

 

 
 
 
 
Objective-C
 
1
2
3
4
5
6
7
8
@interface CYXGroupItem : NSObject
/** 頭部標題 */
@PRoperty (strong, nonatomic) NSString * headerTitle;
/** 尾部標題 */
@property (strong, nonatomic) NSString * footerTitle;
/** 組中的行數組 */
@property (strong, nonatomic) NSArray * items;
@end

 

  • 行模型的設計(CYXSettingItem.h),分析每一行的所有元素:比如只有標題

 

 
 
 
 
 
Objective-C
 
1
2
3
4
@interface CYXSettingItem : NSObject
@property (strong, nonatomic) NSString * title;/**< 標題 */
+ (instancetype)itemWithtitle:(NSString *)title;/**< 設置標題值 類方法 */
@end

 

  • 類方法的實現(CYXSettingItem.m)

 

 
 
 
 
Objective-C
 
1
2
3
4
5
+ (instancetype)itemWithtitle:(NSString *)title{
  CYXSettingItem *item = [[CYXSettingItem alloc]init];
  item.title = title;
  return item;
  }

 

  • 第三步 回到設置頁面的控制器(CYXFourViewController.m)
    • (1) 實現< UITableViewDataSource >協議的3個方法
    • (2) 給對應的模型設置值

 

 
 
 
 
 
Objective-C
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#import "CYXFourViewController.h"
#import "CYXSettingItem.h"
#import "CYXGroupItem.h"
 
@interface CYXFourViewController ()
 
@property (strong, nonatomic) NSMutableArray * groups;/**< 組數組 描述TableView有多少組 */
 
@end
 
@implementation CYXFourViewController
/** groups 數據懶加載*/
- (NSMutableArray *)groups
{
    if (!_groups) {
        _groups = [NSMutableArray array];
    }
    return _groups;
}
 
- (instancetype)init{
 
    // 設置tableView的分組樣式為Group樣式
    return [self initWithStyle:UITableViewStyleGrouped];
}
 
- (void)viewDidLoad {
    [super viewDidLoad];
 
    //添加第1組模型
    [self setGroup1];
    //添加第2組模型
    [self setGroup2];
    //添加第3組模型
    [self setGroup3];
 
}
 
- (void)setGroup1{
    // 創建組模型
    CYXGroupItem *group = [[CYXGroupItem alloc]init];
    // 創建行模型
    CYXSettingItem *item = [CYXSettingItem itemWithtitle:@"我的賬號"];
    CYXSettingItem *item1 = [CYXSettingItem itemWithtitle:@"我的收藏"];
 
    // 保存行模型數組
    group.items = @[item,item1];
    // 把組模型保存到groups數組
    [self.groups addObject:group];
}
 
- (void)setGroup2{
 
    CYXGroupItem *group = [[CYXGroupItem alloc]init];
 
    CYXSettingItem *item = [CYXSettingItem itemWithtitle:@"我去好評"];
    CYXSettingItem *item1 = [CYXSettingItem itemWithtitle:@"我去吐槽"];
 
    group.items = @[item,item1];
 
    [self.groups addObject:group];
}
 
- (void)setGroup3{
 
    CYXGroupItem *group = [[CYXGroupItem alloc]init];
 
    CYXSettingItem *item = [CYXSettingItem itemWithtitle:@"關注我們"];
    CYXSettingItem *item1 = [CYXSettingItem itemWithtitle:@"關于我們"];
 
    group.items = @[item,item1];
 
    [self.groups addObject:group];
}
 
#pragma mark - TableView的數據源代理方法實現
 
/**
*  返回有多少組的代理方法
*/
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
 
    return self.groups.count;
}
/**
*  返回每組有多少行的代理方法
*/
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 
    CYXGroupItem *group = self.groups[section];
    return group.items.count;
}
 
/**
*  返回每一行Cell的代理方法
*/
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 
    // 1 初始化Cell
    // 1.1 設置Cell的重用標識
    static NSString *ID = @"cell";
    // 1.2 去緩存池中取Cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    // 1.3 若取不到便創建一個帶重用標識的Cell
    if (cell == nil) {
        cell  = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    // 設置Cell右邊的小箭頭
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
 
    // 2 設置數據
    // 2.1 取出組模型
    CYXGroupItem *group = self.groups[indexPath.section];
    // 2.2 根據組模型取出行(Cell)模型
    CYXSettingItem *item = group.items[indexPath.row];
    // 2.3 根據行模型的數據賦值
    cell.textLabel.text = item.title;
 
    return cell;
}
 
@end

 

實現效果

  • 如果你希望使用方式二實現點擊Cell的跳轉,需要實現下面的方法,并在里面調用navigationController的pushViewController方法跳轉到你自定義的控制器。

 

 
 
 
 
 
Objective-C
 
1
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

看到這里,如果你是個iOS初學者,應該覺得方式2的實現過于繁瑣,但方式2卻是個一勞永逸的方式。換句話說,如果你用方式2封裝了一個完整的設置頁面的框架,在下一個項目中,再有類似的設置頁面,你便可以直接把這個框架拷貝過去,改少量的代碼便可以完美兼容,肯定比你再重新拖Storyboard要便捷,因此本人是比較推崇這種方式的。

全能程序員交流QQ群290551701,群內程序員都是來自,百度、阿里、京東、小米、去哪兒、餓了嗎、藍港等高級程序員 ,擁有豐富的經驗。加入我們,直線溝通技術大牛,最佳的學習環境,了解業內的一手的資訊。如果你想結實大牛,那 就加入進來,讓大牛帶你超神!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久不卡| 精品日韩美女的视频高清| 国产91在线播放九色快色| 亚洲色图第三页| 2019中文字幕在线观看| 亚洲日韩欧美视频| 97精品国产97久久久久久| 国语自产在线不卡| 欧美日韩美女在线| 高潮白浆女日韩av免费看| 2019中文字幕免费视频| 欧美激情免费观看| 精品福利一区二区| 欧美精品激情在线| 国产综合久久久久| 亚洲va男人天堂| 亚洲精品xxx| 亚洲最大的成人网| 亚洲欧美制服综合另类| www.日本久久久久com.| 亚洲激情中文字幕| 亚洲成年网站在线观看| www.亚洲一二| 日韩av在线网址| 插插插亚洲综合网| 国产精品丝袜白浆摸在线| 久久久精品2019中文字幕神马| 久久男人资源视频| 日本电影亚洲天堂| 精品在线观看国产| 亚洲情综合五月天| 亚洲男人天堂2023| 精品视频偷偷看在线观看| 亚洲欧洲在线免费| 久久中文字幕视频| 久久久久久久久久亚洲| 欧美日韩国产页| 欧美在线亚洲一区| 色偷偷88888欧美精品久久久| 亚洲午夜av电影| 久久精品国产久精国产一老狼| 91在线视频导航| 欧美精品久久久久a| 日韩成人免费视频| 欧美日本啪啪无遮挡网站| 欧美日韩亚洲视频一区| 成人免费网站在线看| 日韩精品福利网站| 日韩精品高清在线| 美女黄色丝袜一区| 在线视频精品一| 97精品一区二区视频在线观看| 亚洲国产欧美一区二区丝袜黑人| 亚洲成色777777在线观看影院| 亚洲成av人片在线观看香蕉| 91精品国产综合久久男男| 日韩成人在线视频网站| 97国产真实伦对白精彩视频8| 亚洲欧美成人一区二区在线电影| 日韩在线欧美在线| 日韩av影片在线观看| 中文字幕一区日韩电影| 欧美日韩国产精品一区二区不卡中文| 日本一欧美一欧美一亚洲视频| 性色av香蕉一区二区| 91久久久久久久久久久| 在线观看国产精品91| 亚洲人成在线免费观看| 亚洲黄色有码视频| 国产伦精品免费视频| 亚洲综合最新在线| 亚洲性视频网站| 欧美黑人性视频| 欧美老肥婆性猛交视频| 欧美日韩国产精品一区二区不卡中文| 国产精品美女久久久久久免费| 日韩一区二区在线视频| 日韩av一区二区在线观看| 亚洲一区二区精品| 91精品国产高清自在线| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲va国产va天堂va久久| 日韩电影中文字幕| 777午夜精品福利在线观看| 91精品视频专区| 亚洲欧美日韩中文在线| 国产欧美韩国高清| 国产亚洲欧美另类中文| 91精品免费视频| 亚洲一品av免费观看| 亚洲欧美激情视频| 久久精品人人做人人爽| 狠狠躁夜夜躁人人爽天天天天97| 一区二区三区无码高清视频| 国产专区欧美专区| 国产精品成人aaaaa网站| 国产精品va在线播放我和闺蜜| 亚洲激情视频网站| 国产精品视频地址| 亚洲精品国产精品国产自| 日韩av网站导航| 2019中文字幕在线| 国产欧美精品一区二区三区-老狼| 91精品国产网站| 国外成人在线播放| 精品国产91久久久久久老师| 国产成人av在线| 亚洲成人性视频| 精品调教chinesegay| 亚洲国产成人精品久久久国产成人一区| 91精品视频在线看| 国产亚洲激情视频在线| 亚洲美女精品久久| 国产精品欧美日韩一区二区| 国产精品中文在线| 91av视频在线| 欧美一级高清免费播放| 亚洲黄页网在线观看| 亚洲视频欧美视频| 中文字幕在线看视频国产欧美在线看完整| 精品国产乱码久久久久酒店| 亚洲激情视频网站| 久久久久久久爱| 日韩欧美在线免费| 2019精品视频| 久久久伊人欧美| 日本免费久久高清视频| 欧美激情亚洲激情| 日韩视频永久免费观看| 亚洲高清免费观看高清完整版| 国产美女高潮久久白浆| 成人h猎奇视频网站| 91久久精品美女| 91av在线播放视频| 亚洲免费人成在线视频观看| 亚洲第一免费网站| 亚洲视频第一页| 久久综合免费视频影院| 欧美激情欧美狂野欧美精品| 久久久久久国产精品三级玉女聊斋| 亚洲福利在线看| 91av视频在线观看| 久久中文字幕在线视频| 久久精品小视频| 伊人一区二区三区久久精品| 亚洲专区中文字幕| 欧美激情在线有限公司| 97久久超碰福利国产精品…| 亚洲性猛交xxxxwww| 国产日韩欧美在线| 欧美体内谢she精2性欧美| 精品国产欧美一区二区三区成人| 欧美精品在线视频观看| 日韩电视剧在线观看免费网站| 国产精品av免费在线观看| 国产成+人+综合+亚洲欧洲| 欧美一区深夜视频| 91免费欧美精品| 韩曰欧美视频免费观看| 亚洲电影免费观看高清完整版| 国产精品久久久久久久久久久新郎| 91精品久久久久久久久久另类| 中文字幕精品久久久久| 成人激情电影一区二区|