簡體   English   中英

Interface Builder不允許連接到自定義UIView類?

[英]Interface Builder won't allow connections to custom UIView class?

使用Xcode 4.3.3,我無法弄清楚如何將自定義UIView類中的出口與Interface Builder中創建的對象連接起來。

在一個ViewController中,我有各種按鈕,滑塊等,我正在嘗試將其分組到Views中。 因此,在IB的ViewController中,我添加了3個視圖。 在任何給定時間只能看到1個視圖。

我派生了自定義UIView類來處理這3個視圖中的每一個。 我的視圖控制器實例化每個類。 我在IB中選擇了視圖,打開了Identity Inspector並將Class設置為我的自定義類。 但是當我嘗試將視圖中的連接和/或它的組成控件拖動到自定義視圖的.h文件時,IB將不會添加連接。

IB允許我通過拖動到父視圖控制器的.h來添加出口/操作,但不能添加到自定義視圖的.h文件。 我想過,一旦我將View的類設置為我的自定義類,我就可以將視圖組件的出口拖到我的自定義類而不是視圖控制器中。

這個問題與我的相似: 如何將UIview出口連接到自定義子視圖這兩個解決方案(手動添加出口並在IB中設置視圖的類)並沒有改變我的行為。 這是我添加的手動插座:

customView3.h

#import <UIKit/UIKit.h>

@interface customView3 : UIView

@property (retain) IBOutlet customView3 *view3;
@property (retain) IBOutlet UISlider *slider;

@end

customView3.m

#import "customView3.h"

@implementation customView3

@synthesize view3, slider;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
    // Initialization code
    }
    return self;
}
@end

我在這里錯過了什么? 為了向我的自定義UIView而不是視圖控制器添加插座,我還需要設置/檢查什么?

請注意,我今天確實讓它工作,但是必須在派生類中手動插入/輸入插座,然后我可以從頭文件拖到Storyboard中的UI元素,但不是相反。

我向Apple公開了一個錯誤。 如果發生任何有趣的事情,我會更新這個答案。

更新於2013年10月4日:經過大量研究后,問題的根源似乎是IB認為我正在嘗試將對象連接到類中的屬性,然后我將創建一組這樣的實例class然后IB將無法告訴哪個實例應該處理消息。 因此,它不相信我相信我(可能)在一個類的幾個實例中同時從一個對象連接到一個屬性的多個副本。

我的觀點是,我只想要一個自定義UIView的單個實例,並且我應該能夠告訴IB,“不要驚慌,你只是處理這個實例。”

我現在專注於一個新項目,並沒有機會在Xcode 5中重試這個; 但是,鑒於上面的信息,我不樂觀它也適用於Xcode 5。

你要做的當然是明智的(IMO)和可能的。 然而,當在子視圖中建立與出口的連接時,XCode非常古怪。

我發現清理,重建和有時重新啟動XCode往往有所幫助,但有時它只是不起作用。 在某些情況下,我通過手動創建插座並從插座拖動到控件而不是其他方式來使其工作。

我知道,這不是很有幫助,但我只是想明確表示這應該可以正常工作,當它沒有時,它肯定是由於XCode中的一個錯誤。

根據我的經驗,您將IBAction和IBOutlet添加到UIViewController的子類而不是UIView的子類。 因此,在MVC模型中,您的“1”UIViewController中包含所有這些IBOutlet,然后您使用這些IBOutlet中的數據來更新您的視圖。

因此,您可以在IB中創建UIViews對象,然后在代碼中創建相應的類,然后將IB中的UIViews對象的類更改為您的UIView子類。 只需將所有IBOutlets放在UIViewController中,其中包含所有UIViews,從IBOutlets獲取所需的值,然后將它們傳遞給(設置它們)你的UIView子類。

希望這可以幫助。

我遇到了同樣的問題並找到了解決方法:

1)使用左側的customView3.xib和右側的customView3.h打開Assistant Editor

2)ctrl +從customView3.xib中的UISlider拖動到右側的customView3.h代碼

3)將彈出創建新Outlet連接的選項。

4)為連接命名,然后單擊“連接”

然后它將創建一個連接的IBOutlet。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM