我有幾個自定義按鈕設置在故事板上,我試圖在代碼中重新創建,但不知何故,即使在我的CGRectMake函數中使用相同的參數,我也沒有獲得正確的位置。另一個問題是,自動調整掩碼在代碼中不起作用,因爲我將左側,底部和右側支柱突出顯示,因此按鈕在3.5英寸和4英寸兩種屏幕尺寸下都保持位置,但是通過代碼創建的按鈕不會做這個。我從故事板發佈XML,然後發佈我的代碼以顯示我的意思。在代碼之前,對我正在嘗試做的一些背景進行了說明。我有我的項目通過故事板設置的多個控制器/視圖中的這些自定義按鈕..我試圖創建一個單獨的控制器現在與控制器中的按鈕編程,然後讓我的其他控制器繼承此,以防萬一我需要修改,這將只需要進行一次代碼等價的故事板UIButton
這裏是我的代碼:
這是XML從故事板:
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="iz0-cT-TPO">
<rect key="frame" x="0.0" y="357" width="106" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMinY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" image="Anotpressed.png">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="Apressed.png">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
我在我的視圖控制器等效代碼爲:
(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UIButton *AButton=[UIButton buttonWithType:UIButtonTypeCustom];
[AButton setFrame:CGRectMake(0, 357, 106, 60)];
[AButton setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin];
[AButton setImage:[UIImage imageNamed:@"Anotpressed"] forState:UIControlStateNormal];
[AButton setImage:[UIImage imageNamed:@"Apressed"] forState:UIControlStateHighlighted];
[AButton setEnabled:YES];
[self.view addSubview:AButton];
}
目前,我正在做的是將故事板按鈕留在原地,然後從具有編程按鈕的視圖控制器繼承以查看它們是否相同,並且我發現我的編程按鈕遠遠高於故事板按鈕,儘管它們有相同的座標等。
我對這個問題的詳細程度表示歉意,但我想提供一個我想要達到的完整圖像。首先,如何以編程方式重新創建相同的按鈕,其次是(繼承/子類化)在我的項目中重新創建這些按鈕的正確方法?
TL | DR,但也許是因爲你正在viewDidAppear上創建按鈕:而不是在viewDidLoad上做,你正在跳過一些定向事件或類似的東西。當以編程方式創建對象時,在viewDidLoad上創建它們,並且只使用viewDidAppear:設置每次視圖出現在屏幕中時都需要的狀態。在這種情況下,每當您從該視圖控制器中關閉全屏模式視圖控制器時,您將創建一個新按鈕。 –
如果該狀態永不改變,您也可以在viewDidLoad中執行此操作。如果在用戶與視圖進行交互時確實發生了更改,並且您希望在下次視圖顯示時重置狀態,請在viewDidAppear:上執行此操作。這樣想一想:即使用戶在選項卡視圖控制器中更改選項卡,而不是每次都創建,您的視圖仍可以保存在內存中。所以這裏有兩個事件:創作和展示。ViewDidLoad用於創建視圖時的視圖,viewDidAppear:用於顯示視圖的視圖。 –