iOS學習之UIView+UIViewController

—————————————————————— UIView ?

//已經有強指針指向它了。 所以不需要用strong? 用weak 可以減少很多不必要的問題。

@Property (nonatomic , weak )IBOutlet UILabel * label

1.系統調用

2.控制器的view 加載完畢的時候調用。

3.控件的初始化,數據的初始化 。(懶加載)

-(void)viewDidLoad {

[super viewDidLoad]

}

UIView:

它是一個控件,? 它是所有控件的父類..每一個控件其實都是一個容器。可以將其他控件放到該控件的內部。

比較常見的還是將UIView 作為容器。每一個控制器中都有一個UIView。控制器本身是不可見。

能夠看到的是控制器的View 。每一個控制器中都有一個UIView 屬性。

控制器中管理的所有控件都是該控件的子控件。

在sb中只能用UIView 來裝, 只能用代碼。

常見屬性:? UIView? superview ; // 父視圖? 【當前視圖所在的父視圖】

NSArray? subviews

NSInteger? tag? 父控件可以通過tag 來找到對應的子控件。

常見方法: addSubview : 添加一個子控件的view。

removeFromoSuperview 將自己從父控件中移除

tag? 根據tag 拿到對應的UIView? ? ? ? 【設置? 紅色的tag = 1 ; UIView *redView = [self.view viewWithTag: 1 ] ; 】

少使用,效率非常差,用起來很混亂。




//自定義View xib的用法 (項目名稱:設置文件頭? 滾動廣告? 五張圖片 )

步驟(1)創建 新文件 userInterface? 中的 empty 文件? 取名CZHeaderView

(2)xib 中加入View 4中屬性size取freedom? statusBar 取None 5中取大小 W 375 H 200

加入scrollView? 到View 中? ? 設置5中 10 10 355 140

加入新View? ? ? 到主View 中? ? 設置5中 0 160 375 1? //一條線就畫好了

加入新View? ? ? 到主View 中? ? 設置5中 0 200 375 1? //一條線就畫好了

加入Label? ? ? ? 到主View 中? ? 設置5中 10, 170,100,21? label.text= 猜你喜歡

(3)//封裝起來(自定義View)

創建一個類 CZHeaderView? 然后繼承 UIView//名字最好和xib的取名一樣

(4)點擊父View 設置自定義類型 中設置3中 Custom Class 中class 設置成 CZHeaderView

(5)連線? option+ Command + 回車? 在CZHeaderView.m 中連線

//? ? ? ? ? ? ? 手動寫入代碼

@interface CZHeaderView()

//scrollView連線

@property(weak,nonatomic) IBOutlet UIScrollView *scrollView;

@end

(6)//如何加載? 回到 ViewController.m 中

導入頭文件 #import"CZHeaderView.h"

-(void)viewDidLoad? //原有的代碼 這行不需要自己寫入

{

self.tableView.tableHeaderView = [CZHeaderView headerView];//手動寫入代碼

}

(7)//回到 CZHeaderView.h 中

+(instancetype)headerView;//手動寫入代碼

//回到 CZHeaderView.m 中

//類方法 快速初始化對象

+ (instancetype)headerView

{

CZHeaderView *headerView = [[[NSBundle mainBundle] loadNibNamed:@"CZHeaderView" owner:nil options:nil] lastObject];

return headerView;

}

//當xib中的控件加載完成會調用此方法

- (void)awakeFromNib

{

CGFloat iconW = self.scrollView.frame.size.width;

CGFloat iconH = self.scrollView.frame.size.height;

for (int i = 0; i < 5; i++) {

NSString *imgName = [NSString stringWithFormat:@"ad_%02d",i];

UIImageView *iconView = [[UIImageView alloc] init];

[self.scrollView addSubview:iconView];

iconView.image = [UIImage imageNamed:imgName];

CGFloat iconX = i * iconW;

CGFloat iconY = 0;

iconView.frame = CGRectMake(iconX, iconY, iconW, iconH);

}

self.scrollView.contentSize = CGSizeMake(5 * iconW, 0);

}

IOS是一個閉源系統,從uiview跳轉到uiviewcontroller需要有特殊的工具,跳轉是在控制器之間發生的,應該是由一個控制器跳轉到另一個控制器,跳轉后就可以把當前的控制器默認的View添加到窗口上,而不是由UIView跳轉到控制器,不要犯這樣的錯;

控制器跳轉辦法:

1、用UINavigationController 的pushViewController

2、用self的presentViewController

3、再就是用storyBoard的segue進行跳轉

self.cover.alpha = 0.3;

常用的方法總結:

1.懶加載

作用: 用到的時候再創建。

01. @Property (strong ,nonatomic) MIOViewController *vc;

02. -(MIOViewController *)vc

{

if(!_vc)

{ self.vc =[ [MIOViewController alloc]init];

self.vc.view.frame = CGRectMake(100,100,100,100);

}

}

知識點: 1. 一個控制器的view 是可以隨意調整尺寸和顯示位置的。

2.? 一個控制器的view 是可以隨意添加到其他view 中

3 . 如果將一個控制器的view 添加到其他view中 那么要想辦法保證控制器不被銷毀,

4. 原則: 主要view? 在 view所在的控制器必須得在,這樣才能保證view 內部的數據和業務邏輯正常

知識點:如果一個view? 添加到另一個viewController? 上添加千次萬次, 也只會添加一次,它會自動判斷。 比如:【self.view addsubview:test.view】;

知識點: 從控制器 移除的view? 并不會銷毀(死了),只要這個控制器還在, 它就還活著, 只是暫時移除出去了。

【self.view? removeFromSupview】;? // 暫時從父控件移除,暫時看不見而已。是否銷毀看是否有強指針指著它。

知識點: 控制器中又有控制器 【UIViewController? -> UIViewController】

在? 控制器 A 中? 添加另一個tableview控制器B

存在的問題:

tableview 能活到現在是因為 [ self.view addSubview:test.view]; 被加入進去,所以能夠顯示出來。

但是 控制器 HMTestViewController 不能活到今天,因為它是個局部變量。

所以它死了。數據源也就死了。意味著沒有人給它數據。所有沒有數據

因為它的數據源是 test.view.dataSource = test ;? 但是死了就會變成? test.view.dataSource = nil ;

需求: 控制器的view 還在,但是view 上面的數據不顯示,極大可能是因為:控制器提前被銷毀了。

解決方式:

加入強引用:@property (strong,nonatomic) HMTestViewController *test;

self.test = test

就能夠看到數據了。

問題: EXC _ BAD_ACCESS? 經典錯誤? 壞內存訪問

控制器死了,view 還在 ; view中的 button 被點擊的時候。? 相當于讓死人管理里面的控件,所以會成為壞內存。

解決。 控制器要強引用。

@property (strong,nonatomic) UIViewController *viewControlelr;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • *7月8日上午 N:Block :跟一個函數塊差不多,會對里面所有的內容的引用計數+1,想要解決就用__block...
    炙冰閱讀 2,542評論 1 14
  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內容...
    i得深刻方得S閱讀 4,752評論 1 9
  • 感恩自己能以身作則,言傳身教!同時也感恩飾品店老板的寬容大度!今天女兒在飾品里看飾品,拿了一個皇冠...
    靜若處子閱讀 324評論 0 0
  • 29號,星巴克中國是不是推出了一款超文雅的咖啡“馥芮白”,于是這幾天,朋友圈有人貼圖,或是炫耀,或是表示不明白,因...
    王子路閱讀 522,997評論 66 231
  • 現在還有沒入睡的朋友嗎?我本來是早早關機想睡覺的,結果失眠了,重新打開手機。看到了高中F4里小伙伴給我發的足足占了...
    元寶臉plus閱讀 251評論 2 0