sb基本使用

sb中有個自定義view和btn并列,怎么把btn屬性拖入自定義view呢?

  • 雖然不能從sb上拖出btn,但是可以寫代碼,往sb上拖拽!!!
image.png
SB使用tableView步驟:
SB使用collectionview步驟:
如果是新版的Xcode,顯示的View可能是正方形的,這是由于xib文件自動開啟了size classes功能,該功能是做適配用的.
xib、storyboard都屬于資源文件,而不是源文件,放在main bundle中。
//所以加載xib的時候使用NSBundle
TestView *tView = [[NSBundle mainBundle] loadNibNamed:@"TestView" owner:self options:nil][0];

//加載sb
SecVC *secVC = [[UIStoryboard storyboardWithName:@"Demo" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"SecVC"];
#@"Demo"參數(shù)代表SB的文件名字,@"SecVC"代表該VC在SB中的ID,具體使用會在下面的文章中提到。個人建議,該ID最好與類名相同,這樣便于將實例化的方法封在基類中
一般的UIView對象,代碼初始化的時候都會調(diào)用initWithFrame:方法,但是用xib創(chuàng)建的UIView對象是不會調(diào)用此方法的,因為該對象的Frame在xib文件中就可以確定了。
- (instancetype)initWithCoder:(NSCoder *)aDecoder
所以,當以xib創(chuàng)建UIView對象的時候這個函數(shù)會調(diào)用,之前在initWithFrame:中要做的事情,可以放在initWithCoder:中,或者放在:

- (void)awakeFromNib
{
    [super awakeFromNib];
    //...
}
該函數(shù)會在initWithCoder:后調(diào)用,從名字我們就能看出,這個函數(shù)的觸發(fā)時機是控件已經(jīng)從xib文件中“解檔”之后,兩個函數(shù)之間的關(guān)系有點像VC的loadView和viewDidLoad之間的關(guān)系。
很多人在剛剛學習auto layout的時候總是很困惑,為什么代碼修改frame不生效,下面詳細的說明一下原因:

不使用auto layout時是可以在viewDidLoad:里設置frame的,一旦開啟了auto layout,就要注意,通常在viewDidLoad:中設置frame就不再生效,因為iOS5加入的viewWillLayoutSubviews會在viewDidLoad之后調(diào)用,而該函數(shù)會在執(zhí)行的時候去加載該文件對應的xib設置的約束,就是說在viewDidLoad:中設置frame的時機太早了,沒有生效就又改成了xib中的樣子,而且在viewWillLayoutSubviews中修改frame也是不生效的,那么,如何才能用代碼修改布局生效?
方法一:
在viewDidLayoutSubviews中修改frame,這是最簡單的方法。
方法二:
選中xib中的約束(藍色線段,左邊欄Constants里的item)像拖動其他控件一樣,將其拖動成為IBOutlet的屬性或全局變量,eg:

property (weak, nonatomic) IBOutlet NSLayoutConstraint *testViewWidthConstraint;
- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];
    //通過修改約束達到修改布局的效果
    self.testViewWidthConstraint.constant = 200;
}
方法二中這種修改約束constant屬性的方法還可以產(chǎn)生動畫效果,eg:

[UIView animateWithDuration:1 animations:^{
        self.testViewWidthConstraint.constant = 200;
        [self.view layoutIfNeeded]; //這句話很重要,只有重新布局才會產(chǎn)生動畫效果,否則沒有動畫效果(注意:使用約束所在控件的父控件調(diào)用layoutIfNeeded)
}];
Paste_Image.png
代碼實現(xiàn)segue跳轉(zhuǎn)也很簡單:

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(nullable id)sender
第一個參數(shù)是segue的id,第二個參數(shù)是觸發(fā)這個跳轉(zhuǎn)的控件。
在segue跳轉(zhuǎn)頁面的過程中還會調(diào)一個函數(shù),我們可以重寫這個函數(shù),來決定是否讓這個跳轉(zhuǎn)發(fā)生。eg:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
    if (_islogin) {
        return YES;
    } else {
        NSLog(@"您還沒有登錄,請先登錄"); //用log舉個例子
        return NO;
    }
}

設置tableview的頭部view和尾部view


SB中,UIViewController中不能把類修改為UITableViewController(會崩潰)

使用sb拖拽的cell,系統(tǒng)會自動幫我們注冊cell,所以我們不要再自己注冊cell,會把sb中注冊的cell覆蓋掉。
Pro1,自動布局時,cell背景圖手動設置底部圓角,并且自適應高度。
設置圓角背景圖不會自適應高度,而且cell會自適應圖片的大小來作為cell的高度,導致文字較少的行,都是圖片的高度作為cell的高度。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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