界面的搭建

  • 對(duì)于簡(jiǎn)單界面用xib直接創(chuàng)建肩榕,若覺(jué)得設(shè)置的圖片不符合自己的要求,或者是尺寸不符合要求氏捞,可以在代碼中進(jìn)行修改碧聪,比如,如下代碼
- (void)viewDidLoad {
    [super viewDidLoad];
        // 獲取按鈕的背景圖片
    UIImage *image =  _loginBtn.currentBackgroundImage;
    // 將圖片進(jìn)行拉伸液茎。
    image = [image stretchableImageWithLeftCapWidth:image.size.width * 0.5 topCapHeight:image.size.height * 0.5];
    // 再將修改后的圖片賦值給按鈕
    [_loginBtn setBackgroundImage:image forState:UIControlStateNormal];
}

  • 對(duì)于一般界面的搭建逞姿,

    • 一般采用xib/storyboard與純代碼共同搭建。
    • 也就可以理解為豁护,
      • 用xib搭建基本頁(yè)面哼凯,
      • 代碼進(jìn)行輔助修改。實(shí)現(xiàn)一些效果楚里。
      • 畢竟xib搭建的都是表面的,若想實(shí)現(xiàn)一些功能或者動(dòng)畫(huà)猎贴,以及等等班缎,都需要純代碼進(jìn)行編寫(xiě)蝴光。
  • 比如

    • stroyboard搭建具有靜態(tài)的cell的UItableViewController的控制器。并且完成了沒(méi)有跳轉(zhuǎn)條件的segue直接能夠push其他控制器
    • 但還是需要進(jìn)行代碼的優(yōu)化达址,讓其能夠進(jìn)行更加絢麗的動(dòng)畫(huà)
    • 需要注意的事蔑祟,storyboard中創(chuàng)建的cell沒(méi)有左滑刪除功能,只有純代碼根據(jù)模型創(chuàng)建的cell才有左滑刪除功能(沒(méi)有太多的驗(yàn)證沉唠,需要在進(jìn)行驗(yàn)證)
    • 純代碼實(shí)現(xiàn)cell的移動(dòng)出現(xiàn)(從右邊推出)
// 通常這個(gè)方法疆虚,用來(lái)做cell的動(dòng)畫(huà)
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 先將其平移至最右邊
    cell.transform = CGAffineTransformMakeTranslation(self.view.width, 0);

    [UIView animateWithDuration:0.5 animations:^{
    // 再將所有形變量刪除,返回默認(rèn)狀態(tài)
        cell.transform = CGAffineTransformIdentity;
    }];
}


// 同樣也可以不使用平移满葛,直接移動(dòng)它的位置也可以
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.center = CGPointMake(self.view.width, 0);

    [UIView animateWithDuration:0.5 animations:^{
        cell.center = CGPointMake(0, 0);
    }];
}

  • 為了讓用戶有一個(gè)良好的體驗(yàn)径簿, 所以我們讓每次這個(gè)界面出現(xiàn)的時(shí)候就執(zhí)行這個(gè)動(dòng)畫(huà),所以調(diào)用刷新嘀韧,讓每次頁(yè)面即將出現(xiàn)的時(shí)候篇亭,來(lái)調(diào)用刷新,執(zhí)行動(dòng)畫(huà)(每次刷新锄贷,都有重新給cell賦值译蒂,其尺寸也會(huì)重新固定)
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self.tableView reloadData];
}
  • 對(duì)于push進(jìn)去的控制器,需要進(jìn)行額外的設(shè)置谊却,比如標(biāo)題柔昼,左右按鈕的樣式。
  • 因?yàn)槿绻褂孟到y(tǒng)的UIButton來(lái)進(jìn)行設(shè)置的話炎辨,會(huì)造成右邊是圖片捕透,左邊是文字。(設(shè)置button時(shí)必須應(yīng)該設(shè)置尺寸)
  • 只有通過(guò)自定義控件才能讓圖片和文字調(diào)換位置
  • 關(guān)于自定義按鈕控件
    • 思考 button控件 中 蹦魔,有圖片激率,和 文字, 只有將文字的起點(diǎn)x 取代 圖片的x勿决;并且讓圖片新位置的x 為文字的最大寬度即可乒躺。 文字的寬度隨文字的多少進(jìn)行改變。
    • 關(guān)于按鈕的尺寸低缩,可以調(diào)用- sizeToFit進(jìn)行自適應(yīng)尺寸安排嘉冒。
    • 主要代碼實(shí)現(xiàn)
// 布局子控件
- (void)layoutSubviews
{
    [super layoutSubviews];


    if (self.titleLabel.x > self.imageView.x) {
        // 交換兩個(gè)子控件的位置
        self.titleLabel.x = self.imageView.x;

        NSLog(@"titleLabel-%f",self.titleLabel.x);
    // self.imageView.x = self.titleLabel.width;
        self.imageView.x = CGRectGetMaxX(self.titleLabel.frame);
        [self sizeToFit];
        NSLog(@"imageView-%f",self.imageView.x);

    }

}



// 思想:如果以后系統(tǒng)自帶的功能不滿足需求,就重寫(xiě)這個(gè)方法咆繁,添加額外的功能讳推,一定要記得還原之前的功能
- (void)setTitle:(NSString *)title forState:(UIControlState)state
{
    [super setTitle:title forState:state];

    [self sizeToFit];
}

- (void)setImage:(UIImage *)image forState:(UIControlState)state
{
    [super setImage:image forState:state];
    [self sizeToFit];
}

  • 底部導(dǎo)航條tabBar的隱藏
    • 系統(tǒng)的tabBar的話, 在xib/storyboard中創(chuàng)建的控制器的話玩般,直接在右側(cè)欄中的


      Snip20150725_13.png
    • 如果是純代碼創(chuàng)建的話银觅,直接調(diào)用 - hideBottomBarOnPush進(jìn)行設(shè)置就行了。
  • 本次項(xiàng)目中的是利用的自定義tabBar坏为,所以究驴,隱藏系統(tǒng)原有的tabBar是沒(méi)有作用的镊绪。(因?yàn)樽远x的tabBar,加入到了view當(dāng)中洒忧,是直接占據(jù)了原有tabBar的位置蝴韭。)
    • 設(shè)想如果將自定義的tabBar,加到系統(tǒng)的tabBar內(nèi)熙侍。那么只要隱藏了系統(tǒng)的tabBar榄鉴,那么自定義的tabBar也就跟著隱藏了。 對(duì)于圖片超出尺寸問(wèn)題
      只要?jiǎng)h除蛉抓,taBar內(nèi)不是自定義的view就行了
    • 代碼實(shí)現(xiàn)
#pragma mark - 自定義tabBar
- (void)setUpTabBar
{


    // 2.添加自己的tabBar
    LXLTabBar *tabBar = [[LXLTabBar alloc] init];

    ...

    tabBar.frame = self.tabBar.bounds;

    [self.tabBar addSubview:tabBar];

}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // 移除系統(tǒng)tabBar上自帶的按鈕
    for (UIView *childView in self.tabBar.subviews) {
    // 只要不是自定義的tabBar庆尘,就給刪除
        if (![childView isKindOfClass:[LXLTabBar class]]) {
            [childView removeFromSuperview];
        }

    }
}

  • 關(guān)于頂部導(dǎo)航條的返回按鈕
    • 系統(tǒng)的返回按鈕為藍(lán)色的,不太好看芝雪。所以需要自己來(lái)進(jìn)行設(shè)置减余。
      • 進(jìn)行設(shè)置navigationItem的leftBarButtonItem 上添加自定義的UIBarButtonItem,進(jìn)行圖片和方法的設(shè)定惩系。
      • 由于是多出需要此種定義位岔,所以將其設(shè)置在push方法中,只有這樣的話堡牡,當(dāng)push進(jìn)一個(gè)控制器的時(shí)候抒抬,則對(duì)該控制器的返回按鈕進(jìn)行修改。
      • 但要注意的是晤柄,根控制器也是push進(jìn)去的擦剑,所以需要進(jìn)行判斷,只要不是根控制器芥颈,就要進(jìn)行返回按鈕的設(shè)置惠勒。
      • 但是,如果是自己設(shè)置的圖片和方法的話爬坑,那么就沒(méi)有了系統(tǒng)的左滑功能纠屋。此時(shí)如果想保留系統(tǒng)的左滑功能,需要做額外操作盾计。
      • 返回功能一般保存在self.interactivePopGestureRecognizer.delegate;(交互手勢(shì)的代理)中售担,如果覆蓋了返回按鈕,那么就不會(huì)有滑動(dòng)功能署辉。所以需要在控制器加載的時(shí)候?qū)?code>交互手勢(shì)代理保存,可是對(duì)于根控制器族铆,不需要滑動(dòng),所以將交互手勢(shì)代理進(jìn)行賦原值哭尝。 對(duì)于非根控制器哥攘,賦值nil,讓其能夠跳轉(zhuǎn),不去執(zhí)行別的操作献丑。只有它為空的時(shí)候才能進(jìn)行滑動(dòng)操作末捣。
- (void)viewDidLoad {
    [super viewDidLoad];
    // 前提條件侠姑,覆蓋了系統(tǒng)的返回按鈕创橄,就不會(huì)有滑動(dòng)返回功能。

    _popDelegate = self.interactivePopGestureRecognizer.delegate;


    self.delegate = self;

}
// 監(jiān)聽(tīng)什么時(shí)候回到跟控制器
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (viewController == self.childViewControllers[0]) { // 跟控制器
        self.interactivePopGestureRecognizer.delegate = _popDelegate;
    }else{
        // 實(shí)現(xiàn)導(dǎo)航控制器的滑動(dòng)返回
        self.interactivePopGestureRecognizer.delegate = nil;
    }
    NSLog(@"%@",viewController);
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    // viewController:棧頂控制器莽红,導(dǎo)航條的內(nèi)容是由棧頂控制器

    // 設(shè)置導(dǎo)航條左邊按鈕,非根控制器才需要
    if (self.childViewControllers.count != 0) { // 非根控制器

        viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageWithOriginRenderingName:@"NavBack"] style:UIBarButtonItemStyleBordered target:self action:@selector(back)];
    }

    [super pushViewController:viewController animated:animated];
}

- (void)back
{
    [self popViewControllerAnimated:YES];
}
  • 第二種方法
    • 將系統(tǒng)的tabBar的主題顏色進(jìn)行改變,改成想顯示的顏色妥畏,然后把文字移除屏幕,移到用戶看不到的地方安吁。然后不用管系統(tǒng)的任何東西醉蚁。(只需要在用戶沒(méi)有看到屏幕顯示之前調(diào)用即可。)因?yàn)椴](méi)有覆蓋系統(tǒng)什么鬼店,指示調(diào)用了系統(tǒng)的方法网棍,將其文字的顯示位置進(jìn)行了改變。
    • 代碼實(shí)現(xiàn)
+ (void)initialize
{
    if(self == [XMGNavigationController class])
    {...
    // 獲取當(dāng)前類下的導(dǎo)航條
    // self->XMGNavigationController
    UINavigationBar *bar = [UINavigationBar appearanceWhenContainedIn:self, nil];
    // ...
    // 統(tǒng)一設(shè)置導(dǎo)航條按鈕的顏色
    [bar setTintColor:[UIColor whiteColor]];

    // 獲取UIBarButtonItem
    UIBarButtonItem *item = [UIBarButtonItem appearanceWhenContainedIn:self, nil];

    // 設(shè)置導(dǎo)航條返回按鈕的文字的位置
    [item setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -64) forBarMetrics:UIBarMetricsDefault];
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妇智,一起剝皮案震驚了整個(gè)濱河市滥玷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巍棱,老刑警劉巖惑畴,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異航徙,居然都是意外死亡如贷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門到踏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)杠袱,“玉大人,你說(shuō)我怎么就攤上這事窝稿¢垢唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵讹躯,是天一觀的道長(zhǎng)菩彬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)潮梯,這世上最難降的妖魔是什么骗灶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮秉馏,結(jié)果婚禮上耙旦,老公的妹妹穿的比我還像新娘。我一直安慰自己萝究,他們只是感情好免都,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布锉罐。 她就那樣靜靜地躺著,像睡著了一般绕娘。 火紅的嫁衣襯著肌膚如雪脓规。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天险领,我揣著相機(jī)與錄音侨舆,去河邊找鬼。 笑死绢陌,一個(gè)胖子當(dāng)著我的面吹牛挨下,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脐湾,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼臭笆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了秤掌?” 一聲冷哼從身側(cè)響起愁铺,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎机杜,沒(méi)想到半個(gè)月后帜讲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椒拗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年似将,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚀苛。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡在验,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堵未,到底是詐尸還是另有隱情腋舌,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布渗蟹,位于F島的核電站块饺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雌芽。R本人自食惡果不足惜授艰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望世落。 院中可真熱鬧淮腾,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至圆凰,卻和暖如春杈帐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背送朱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工娘荡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驶沼。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像争群,于是被迫代替她去往敵國(guó)和親回怜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)换薄、插件玉雾、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,029評(píng)論 4 62
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,514評(píng)論 25 707
  • 從寒假開(kāi)始跟著Tyger老師學(xué)習(xí)自然拼讀,那個(gè)時(shí)候便每天玩1a1b游戲轻要,1a游戲孩子玩的挺好复旬,也是我跟著他一起挑戰(zhàn)...
    旂旂媽閱讀 338評(píng)論 1 2
  • 一直小烏龜一直小烏龜,出生之后就沒(méi)見(jiàn)過(guò)媽媽冲泥,他就找啊找啊找媽媽驹碍,突然有一天他發(fā)現(xiàn)一只褐色的蟲(chóng)蟲(chóng)站在一個(gè)球上跳舞,真...
    活火山寶寶閱讀 422評(píng)論 0 0
  • 參考: http://www.xyyz.me/2015/07/24/role-based-authorizati...
    丿丶生若只如初見(jiàn)閱讀 352評(píng)論 0 0