我使用主视图,屏幕底部有一个TabBar。 每个选项卡项应该指向特定的CollectionView(具有特定的API调用)。
为了能够访问UICollectionViewController,必须先进行初始化。 所以我用过:
@main_controller = UITabBarController.alloc.init
layout = UICollectionViewFlowLayout.alloc.init
@main_controller.setViewControllers([
GeolocScreen.alloc.init,
ByNameController.alloc.initWithCollectionViewLayout(layout)
])
self.navigationController.pushViewController(@main_controller, animated:true)
话虽如此:
如果未将PM ::屏幕用作标签项,则不会显示标签图标和标签文本。这意味着,我必须单击图标以在标签栏中显示图标/文本
然后我尝试调用PM :: Screen而不是直接调用UICollectionViewController,并将其作为子视图。 但我没有设法做到这一点。
当我在PM :: Screen中使用
时layout = UICollectionViewFlowLayout.alloc.init
ctrl = ByNameController.alloc.initWithCollectionViewLayout(layout)
append!(ctrl, :ctrl_style).get
我得到了
终止app到期 未被捕获的异常' NoMethodError',原因:' subviews.rb:229:在create_view :: undefined method<对于 ByNameController:0x1104fa050> (NoMethodError)
当我在PM :: Screen中使用
时layout = UICollectionViewFlowLayout.alloc.init
screen = ByNameController.alloc.initWithCollectionViewLayout(layout)
view = UIView.alloc.init
view.append(screen.view)
点击图标不会做任何事情。我从不输入viewWillAppear,我认为这是合乎逻辑的,因为控制器只是附加...但我的数据没有被加载。
如果你有想法,我一定会错过一些明显的东西......谢谢!
PS:以防万一;我的控制器class ByNameController < UICollectionViewController
attr_accessor :data
COLLECTION_CELL_ID = "ArtCell"
COLLECTION_HEADER_ID = "SectionHeader"
def viewDidLoad
super
self.title = App.name
rmq.stylesheet = CollectionStylesheet
collectionView.tap do |cv|
cv.registerClass(ArtCell, forCellWithReuseIdentifier: COLLECTION_CELL_ID)
cv.delegate = self
cv.dataSource = self
cv.allowsSelection = true
cv.allowsMultipleSelection = false
rmq(cv).apply_style :collection_view
end
reload_data
end
def reload_data
mp "RELAODING DATA "
Api.shared.url ".........json"
Api.shared.file_name "content.json"
Api.shared.download_data
end
def viewWillDisappear(animated)
App.notification_center.unobserve @reload_observer
end
def viewWillAppear(animated)
super
@reload_observer = App.notification_center.observe 'ReloadDataNotification' do |notification|
self.data = Api.shared.hash
self.collectionView.reloadData
end
end
def collectionView(view, numberOfItemsInSection: section)
self.data.nil? ? 0 : self.data["items"].reject{|i| i['name'] == "" }.count
end
def collectionView(view, cellForItemAtIndexPath: index_path)
view.dequeueReusableCellWithReuseIdentifier(COLLECTION_CELL_ID, forIndexPath: index_path).tap do |cell|
rmq.build(cell) unless cell.reused
art = {
art: self.data["items"][index_path.row]["art"],
name: self.data["items"][index_path.row]["name"],
thumb: self.data["items"][index_path.row]["thumb"]
}
cell.art = art
end
end
def collectionView(view, didSelectItemAtIndexPath: index_path)
selected = self.data["items"][index_path.row]
@store = StoreInfoController.alloc.init
@store.store_id = selected["storeID"]
self.navigationController.pushViewController(@store, animated:true)
end
end
答案 0 :(得分:0)
要自定义UIViewController的标签栏项,请使用tabBarItem属性:
PM ::屏幕在这里没有任何事情可做。它只是UIViewController的子类,与UICollectionViewController的方式相同。