簡體   English   中英

以編程方式訪問UIScrollView的子視圖

[英]Programmatically access subview of UIScrollView

在視圖控制器中,我添加了UIScrollView,然后將UIView添加到了滾動器。 我通過Storyboard在該UIView中放置了幾個按鈕,我想有條件地以編程方式添加其他按鈕。

我嘗試將以下引用鏈接到Storyboard中的UIScrollView和UIView,但是任何一個鏈接都會在加載此視圖控制器時導致應用程序崩潰:

@property (strong, nonatomic) IBOutlet UIScrollView *scroll;
@property (strong, nonatomic) IBOutlet UIView *v;

由於無法在Storyboard中創建引用插座,因此如何創建對UIView的引用,以便可以添加按鈕?

當應用程序崩潰時,主方法返回行以綠色高亮顯示,並顯示消息Thread1:signal SIGABRT在輸出窗口中,根據鏈接的上述屬性,我看到:

2014-10-20 12:42:26.411 Testbed [2451:283149] ***由於未捕獲的異常'NSUnknownKeyException'而終止應用程序,原因:'[setValue:forUndefinedKey:]:此類不符合鍵滾動。”

要么:

2014-10-20 12:52:06.986 MTH [2578:299917] ***由於未捕獲的異常'NSUnknownKeyException'而終止應用程序,原因:'[setValue:forUndefinedKey:]:此類不符合關鍵訴”

像這樣添加子視圖

[self.v addSubview:button];

像這樣訪問子視圖

UIScrollView *scrollview = (UIScrollView *) _scroll;
UIView *View = (UIView *) scrollview.subviews[0];

我找到了答案。 在視圖控制器的自定義類的ViewDidLoad方法中,我使用了以下內容:

NSArray *sv = self.view.subviews;
UIScrollView *sc = sv[0];
sv = sc.subviews;
UIView *v = sv[0];

我逐步執行,以確認ScrollView是視圖的第一個子視圖,並確認UIView是ScrollView的第一個子視圖。

如果需要通過ViewDidLoad方法訪問此視圖,則可以在頭文件中創建變量。

如果要以編程方式將子視圖添加到視圖,則需要實例化它並將其添加到subView中,如下所示:

UIButton *button = [UIButton new];
[button setTitle:@"BUTTON!" forControlState:UIControlStateNormal];
[button sizeToFit];

// Do any additional setup for your button here, for example setting the frame.
[self.v addSubview:button];

但是,如果您實際上想從問題中解決這個問題,我將無法解決。 因此,請告訴我您是否嘗試錯了!

編輯1

不好意思,我看錯了問題。 查看您提供的錯誤,似乎您沒有在界面構建器的右側窗格中將視圖控制器設置為自定義子類。

發生此錯誤的原因是,盡管您已經鏈接了IBOutlets,但是運行時正在嘗試初始化UIViewController的不正確的子類,因此找不到所需的屬性。

在情節提要中,視圖控制器可能不會繼承自自定義視圖控制器,因此無法找到iboutlet(這就是為什么無法創建鏈接的原因)。 順便說一句:iboutlet不應強而弱,因為它們已經被控制器保留的視圖保留了。

暫無
暫無

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

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