一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

iOS開發(fā)

 承諾程序員之家 2017-04-26
iOS開發(fā)--UI組件

作者:神獸gcc授權(quán)本站轉(zhuǎn)載。

最近把iOS里的UI組件重新整理了一遍,簡單來看一下常用的組件以及它們的實現(xiàn)。其實現(xiàn)在這些組件都可以通過Storyboard很快的生成,只是要向這些組件能夠變得生動起來并且賦予它們更具生命力的事件,還是需要一番功夫的。

UIButton

這個就不多說了,對照官方的文檔也可以更多的去學(xué)習(xí)。插一句題外話,在學(xué)這些組件的時候,最令人頭疼的不是你搞不定一個組件的某個屬性或者方法,而是你壓根兒不知道有這個東西。所以在學(xué)習(xí)這些組件的時候最好的方式還是通過官方文檔,雖然已開始可能有些困難,但是硬著頭皮去啃,就一定會有悟道的那一天。建議有問題先去看文檔,如果實在不行再去Google啊,Stack Overflow啊神馬的。

UIAlertController

彈出式的提示框?,F(xiàn)在市面上的書籍包括網(wǎng)上的一些資料都還停留在iOS8之前的時代,那個時候的彈出框是一個叫做UIAlertView的東西,但是現(xiàn)在,在XCode7和iOS9的時代,你會發(fā)現(xiàn)這個東西被棄用了。蘋果自iOS8開始,廢除了UIAlertView而改用UIAlertController來控制提示框。

來看看UIAlertController的實現(xiàn)吧,下面這個程序是我在練習(xí)UITableView時的代碼,實現(xiàn)了一個類似與通訊錄的東西,我們抓住主要矛盾,來看點擊某一行cell后,彈出的消息提示框是怎么實現(xiàn)的。以下代碼在ViewController.m中實現(xiàn)。

//創(chuàng)建提示框窗口
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"System Info" message:[contact getName] preferredStyle:UIAlertControllerStyleAlert];
//實例化取消按鈕  
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
    //點擊取消按鈕后控制臺打印語句。
    NSLog(@"The \"Okay/Cancel\" alert's cancel action occured.");
}];
//實例化確定按鈕    
UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    NSLog(@"The \"Okay/Cancel\" alert's other action occured.");
    //下面這段代碼不用管它,簡單點講就是獲取當(dāng)前行的一個字符串。
    UITextField *textfield = alertController.textFields[0];
    KCContactGroup *group = _contacts[_selectedIndexPath.section];
    KCContact *contact = group.contacts[_selectedIndexPath.row];
    contact.phoneNumber = textfield.text;
    NSArray *indexPaths = @[_selectedIndexPath];
    [_tableview reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];
}];
//向彈出框中添加按鈕和文本框
[alertController addAction:cancelAction];
[alertController addAction:otherAction];
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
    // 可以在這里對textfield進(jìn)行定制,例如改變背景色等
    textField.text = contact.phoneNumber;
}];
//將提示框彈出
[self presentViewController:alertController animated:YES completion:nil];

實現(xiàn)了大概就是這個樣子,文本框里的東西是從cell里面提取的。

iOS開發(fā)--UI組件

這里還有一句題外話要講。網(wǎng)上是沒有任何關(guān)于最新的UIAlertController的使用教程的,我自己用了整整一個下午看官方文檔一步一步調(diào)試才實現(xiàn)了這個惱人的提示框。官方的文檔真的是個好東西,越用越強大?。?/p>

UISegmentedControl

分段控件,就是一欄按鈕集成在一排里。很簡單,就像Button一樣。這個樣子的:

iOS開發(fā)--UI組件

UISwtich

按鈕控件,手機里開飛行模式的那個東西。通過Storyboard可以很快很方便的建立,不要忘了關(guān)聯(lián)起來就好。

這里簡單講一下它的純代碼實現(xiàn),其實包括上面的UISegmentedControl,還有下面的一些簡單控件它們手寫實現(xiàn)的方法都是一樣的。截張圖給大家說明一下就好了,都是一樣的,后面的類似的控件也不多啰嗦了。

iOS開發(fā)--UI組件

UISlider

進(jìn)度條型的選擇控件,對應(yīng)數(shù)值,可以進(jìn)行設(shè)置音量等操作,根據(jù)官方文檔可以看到很多關(guān)于它的設(shè)置,基本實現(xiàn)同上。

UIPageControl

這是個好東西。

重要的事情說三遍。個人認(rèn)為,它雖然很小,但絕對逼格夠高,搭配UIScrollView,絕對讓你的界面高端起來。

關(guān)于這個的代碼不小心被我刪掉了,沒法給大家展示,不過過幾天我會用這個做一個APP的歡迎界面,到時候再展示咯。

UITextField

簡單控件,可以參考先前的傳值操作(傳送門:iOS開發(fā)——從一道題看Delegate),基本上把這個的用法實現(xiàn)的差不多了,要想更多地設(shè)置它————官方文檔見。

UIDatePicker

顧名思義,日期選擇控件。實現(xiàn)同上。

UIScrollView

有的時候呢,我們的照片,或者圖片會很大,而允許我們輸出的窗口卻不夠大,那么我們就需要這個家伙來幫忙了,它可以讓一張圖片在一個視圖里滾動展示,效果類似于。。。做B超?(天,怎么會有這種腦洞大開的比喻)

大概就是這樣整的:

iOS開發(fā)--UI組件

UITextView

還是一個可編輯文本框,與先前的UITextField不同的是,這個可以顯示更多行的內(nèi)容,還可以對他進(jìn)行編輯的監(jiān)控,通過代理方法,我們可以獲取該文本框中的內(nèi)容,在實際的應(yīng)用中,發(fā)布什么長微博啊,文本啊,都能用到它。

這里實現(xiàn)沒什么好說的,主要來看看它的幾個代理方法:

iOS開發(fā)--UI組件

UIToolbar

開發(fā)中經(jīng)常會用到的控件之一,實現(xiàn)起來也很簡單,與此同時我們還要知道 UIBarButtonItem 和 Fixed Space Bar Button Item,這兩個小東西是在Bar上的按鈕和間距,都被對象化了。

來看代碼:

#import "ViewController.h"
@interface ViewController 
//聲明
@property (nonatomic, strong) UIToolbar *mytoolbar;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    //實例化
    self.mytoolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 30)];
    //添加到視圖
    [self.view addSubview:self.mytoolbar];
    //選擇風(fēng)格,這里我們選擇黑色風(fēng)格
    self.mytoolbar.barStyle = UIBarStyleBlack;
    //添加按鈕和按鈕之間的間距,這些都被對象化了,按鈕是可以實現(xiàn)方法的
    UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithTitle:@"hello" style:UIBarButtonItemStylePlain target:self action:@selector(sayhello)];
    UIBarButtonItem *fixed = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    UIBarButtonItem *item2 = [[UIBarButtonItem alloc]initWithTitle:@"bye" style:UIBarButtonItemStylePlain target:self action:@selector(saybye)];
    //實例化的UIToolbar里面有items屬性,是一個數(shù)組,用來存放我們要加上去的按鈕
    self.mytoolbar.items = @[item1, fixed, item2];
}
//點擊item要實現(xiàn)的方法,輸出hello或者bye
- (IBAction)sayhello{
    NSLog(@"hello");
}
- (IBAction)saybye{
    NSLog(@"bye");
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

UIPickerView

與前面的時間選擇類似,只不過這個你可以自己設(shè)置內(nèi)容。

UITableView

BOOM!

強大,異常強大。不多說,我推薦看iOS開發(fā)系列--UITableView全面解析這篇文章,寫得很棒。

我自己也把大部分的學(xué)習(xí)時間用在了它的學(xué)習(xí)上,至今為止我覺得我還沒能真正做到熟練地使用它,等以后成熟了,再寫吧。

UICollectionView

又是一個龐大的家伙,在很多壁紙類APP中我們可以看到它的影子。

關(guān)于它的實現(xiàn),我總結(jié)為以下幾步:

  • .h文件聲明代理和數(shù)據(jù)源

  • .m文件具體實現(xiàn)

    • 聲明UICollectionView

    • 實例化,包括設(shè)置大小,位置,顏色等等

    • 加載代理和數(shù)據(jù)源到實例化的view

    • 注冊cell(這里需要)

    • 將實例化的UICollectionView加入到View中

    • 實現(xiàn)數(shù)據(jù)源方法(包括必須實現(xiàn)的和選擇實現(xiàn)的)

    • 實現(xiàn)代理方法(包括必須實現(xiàn)的和選擇實現(xiàn)的)

關(guān)于數(shù)據(jù)源方法和代理方法,在這里需要特別說明一下,我們還是會出現(xiàn)不知道這個數(shù)據(jù)源或者代理中到底有什么的困惑,我們要command進(jìn)去這些代理或者數(shù)據(jù)源去發(fā)現(xiàn)和尋找,文檔還是我們學(xué)習(xí)的最終歸宿。

按照上面的步驟,實現(xiàn)代碼:

#import "ViewController.h"
@interface ViewController 
@property (nonatomic, strong) UICollectionView *collectionView;
@end
static NSString *cid = @"cid";
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UICollectionViewFlowLayout *flowlayout = [[UICollectionViewFlowLayout alloc]init];
    CGRect flame = CGRectMake(20, 40, self.view.frame.size.width-40, self.view.frame.size.height-60);
    self.collectionView = [[UICollectionView alloc]initWithFrame:flame collectionViewLayout:flowlayout];
    self.collectionView.dataSource = self;
    self.collectionView.delegate = self;
    [self.view addSubview:self.collectionView];
    //注冊cell
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cid];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 50;
}
// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cid forIndexPath:indexPath];
    cell.backgroundColor = [UIColor blueColor];
    return cell;
}
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
    return UIEdgeInsetsMake(10, 10, 10, 10);
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    return CGSizeMake(120, 100);
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
    cell.backgroundColor = [UIColor yellowColor];
    NSLog(@"%ld",indexPath.row);
}
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
    cell.backgroundColor = [UIColor blueColor];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

UIViewController

接下來我們來聊聊ViewController。視圖控制器在我們開發(fā)中最重要的 MVC模式 中扮演著重要的角色,作為顯示和數(shù)據(jù)的調(diào)度者,它的存在決定了我們的程序到底以怎樣的形式呈現(xiàn)在用戶面前。

這個最基礎(chǔ)的Controller就不多說了,在目前的XCode中,一般來說新建的第一個Single View就是用的這個。

UINavigationController

很重要的一個東西。導(dǎo)航視圖控制器。說簡單點它就是一個來存放視圖的棧,原則上先進(jìn)后出,一層一層的來管理在它里面的視圖。在學(xué)習(xí)它的過程中還要掌握UINavigationBar、UINavigationitem等控件,還要熟悉幾個pop、push方法。

既然是導(dǎo)航視圖控制器,導(dǎo)航自然不是導(dǎo)的一個視圖,而是管理多個視圖,實現(xiàn)的時候有很多需要注意的地方,我們一步一步的來看。

首先新建一個工程,我們要純手寫代碼來搞定之。

第一步,建立我們需要管理的多個視圖。

“command+N”新建Cocoa Touch Class,命名為myViewController,Subclass of選擇為UIViewController,重復(fù)四次,我們獲得了四個試圖控制器,也就是四個視圖,接下來我們將用導(dǎo)航視圖控制器來管理它們。

第二步,初始界面設(shè)置

在這里,我們需要來到AppDelegate.m文件,來配置初始界面,自定義- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法。

代碼如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //獲取屏幕大小
    UIScreen *screen = [UIScreen mainScreen];
    //初始化窗口
    self.window = [[UIWindow alloc]initWithFrame:screen.bounds];
    //將視圖1設(shè)置為初始視圖
    myViewController1 *vc1 = [[myViewController1 alloc]init];
    //來個背景顏色區(qū)分一下
    vc1.view.backgroundColor = [UIColor blueColor];
    //實例化導(dǎo)航視圖控制器并添加視圖1進(jìn)來
    UINavigationController *nc = [[UINavigationController alloc]initWithRootViewController:vc1];
    //將導(dǎo)航視圖控制器設(shè)置為窗口根視圖
    self.window.rootViewController = nc;
    //設(shè)置窗口可見
    [self.window makeKeyAndVisible];
    return YES;
}

第三步,配置各個視圖

我們要在第一個視圖中實例化第二個視圖,并通過某種方式,使用UINavigationController跳轉(zhuǎn)到第二個視圖;在第二個視圖中實例化第三個視圖,以此類推直到最后一個視圖。當(dāng)然,我們也可以選擇直接跳到某個你想要去的視圖,比如從第四個視圖跳到第一個或者第二個。

我們現(xiàn)在視圖一中添加一個按鈕,添加一個點擊按鈕的事件,注意,我們就是通過這個事件方法來實現(xiàn)頁面的跳轉(zhuǎn)的,myViewController1.m代碼:

#import "myViewController1.h"
#import "myViewController2.h"
@interface myViewController1 
@end
@implementation myViewController1
- (void)viewDidLoad {
    [super viewDidLoad];
    //設(shè)置視圖二樣式,添加一個按鈕,點擊觸發(fā)事件,跳轉(zhuǎn)到下一頁面
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
    [btn setTitle:@"GO" forState:UIControlStateNormal];
    btn.frame = CGRectMake(160, 100, 30, 36);
    [btn addTarget:self action:@selector(go:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(160, 160, 100, 36)];
    lable.text = @"第一頁";
    [self.view addSubview:lable];
}
//這里才是實現(xiàn)頁面跳轉(zhuǎn)的重點?。。。?-(IBAction)go:(id)sender{
    myViewController2 *vc2 = [[myViewController2 alloc]init];
    vc2.view.backgroundColor = [UIColor greenColor];
    //看這里!?。。?!push方法將視圖一推向視圖二
    [self.navigationController pushViewController:vc2 animated:YES];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    在线观看免费无遮挡大尺度视频 | 国产欧美日本在线播放| 日韩成人中文字幕在线一区| 婷婷一区二区三区四区| 免费亚洲黄色在线观看| 日韩欧美精品一区二区三区| 国产午夜精品福利免费不| 高清不卡视频在线观看| 精品国产av一区二区三区不卡蜜| 亚洲中文字幕日韩在线| 免费观看一级欧美大片| 日韩精品小视频在线观看| 亚洲国产欧美精品久久| 久久碰国产一区二区三区| 日本99精品在线观看| 国产欧美日韩在线一区二区| 日韩在线欧美一区二区| 欧美日韩国产另类一区二区| 欧美黑人黄色一区二区| 九九热这里只有免费精品| 久久精品伊人一区二区| 日韩精品在线观看完整版| 黑人粗大一区二区三区| 欧美在线观看视频三区| 四季av一区二区播放| 99精品国产一区二区青青| 国产在线一区二区免费| 亚洲成人免费天堂诱惑| 国产一级二级三级观看| 亚洲一区二区三在线播放| 中文字幕人妻av不卡| 99国产高清不卡视频| 日韩欧美高清国内精品| 1024你懂的在线视频| 性欧美唯美尤物另类视频| 日本美国三级黄色aa| 欧美一区二区三区不卡高清视| 日韩aa一区二区三区| 99国产成人免费一区二区| 国产精品欧美一区二区三区| 国产精品日韩欧美第一页|