簡體   English   中英

根據UITableView和UICollectionView出隊

[英]Dequeuing as per UITableView and UICollectionView

我想在自己的類中使用UITableView和UICollectionView中的出隊模型,在這里將其稱為CustomControl 我的目標是回收視圖控制器而不是視圖,但是我認為原理是相同的。 我對設計的想法是:

  • 使用者是CustomControl實例myCustomControldataSource
  • 使用者告訴myCustomControl它想要對某個字符串標識符使用哪種視圖:

    [myConstomControl registerClass:[UIViewController class] forCellWithReuseIdentifier:@"StandardViewController"]; [myConstomControl registerClass:[SomeCustomController class] forCellWithReuseIdentifier:@"CustomController"];

  • CustomControl在NSDictionary- -(void)registerClass:(Class)viewControllerClass forCellWithReuseIdentifier:(NSString *)identifier { [self.classRegister setObject:viewControllerClass forKey:identifier]; }捕獲此信息-(void)registerClass:(Class)viewControllerClass forCellWithReuseIdentifier:(NSString *)identifier { [self.classRegister setObject:viewControllerClass forKey:identifier]; } -(void)registerClass:(Class)viewControllerClass forCellWithReuseIdentifier:(NSString *)identifier { [self.classRegister setObject:viewControllerClass forKey:identifier]; }

  • myCustomControl刷新時,它將向datasource詢問控制器。 datasourcemyCustomControl中使控制器出隊,並傳入所需的類型作為字符串標識符。 UIViewController *controller = [myCustomControl dequeueViewControllerWithIdentifier:@"StandardViewController"];
  • myCustomControl回收或創建存儲在字典中的類型的控制器,然后將其返回到datasource ,在該datasource中對其進行自定義並返回到myCustomControl以進行顯示。

我歡迎對此模式發表評論,但對我來說似乎可行。 我不確定是否鄰接出隊部分:

  • 當需要為給定的字符串標識符創建或重用控制器時,我將需要為每個標識符單獨設置一組回收的控制器,或者使用其他方法來回收正確的控制器類型。 我想當標識符首次注冊時,我可以創建一個自定義NSSet來存儲該類型的控制器,但是我不確定如何動態標記,以便以后可以通過標識符找到它。 還是應該使用單個隊列並嘗試查找正確類型的東西? 鑒於此模式的目的,這似乎可能會對性能產生影響。
  • 如何創建Class類型的對象?

有一個可變字典來保存數據。 關鍵字是“標識符”,而對象是一個新類的自定義對象,例如:reuseInfo。

自定義對象可以具有一個類名,即VC數組。

調用register方法后,您可以向字典中添加鍵,並使用類名和空數組(Mutable)創建自定義類

  • 調用Dequeue方法時,獲取鍵對象,檢查VC數組。 如果為空,則創建一個vc並返回。
  • 為此,請使用UIViewController的子類,並具有私有屬性“ isReadyForReuse”和方法“ PrepareForReuse”。 編寫自己的邏輯以確定VC是否准備好重用。 -在出隊(如果存在陣列)的情況下,檢查是否有任何可重用的VC,如果沒有,則將新的VC添加到陣列中,然后返回VC。 如果可重用,則調用方法“准備重用”並返回vc。

VC可以覆蓋准備重用,以清理屬性和其他值。

暫無
暫無

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

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