ios - 带有多个部分的水平滚动的 Collection View

标签 ios iphone uicollectionview uicollectionviewcell

我想像这样开发屏幕( objective-c ):enter image description here

这里有部分名称:

  1. 我们喜爱的新游戏
  2. 我们喜欢的新应用

两者都是水平滚动,相互独立。

我的问题是我应该使用什么方式从以下两个选项中实现这一点。如果有任何引用样本,请提供给我:

  1. 我可以使用单个 UICollectionView 并具有不同的部分(动态)实现相同的行为吗?但是不同部分的滚动应该是独立的。因为第 1 部分可能有不同数量的项目(行),而第 2 部分可能有不同数量的项目(行)
  2. 我是否必须以编程方式获取多个 collectionview 然后插入 uiscrollview(垂直 ScrollView )。 abd 然后定义水平滚动并通过标记 collectionview 在单元格中添加项目。

我目前已经通过以下代码完成了水平滚动的collectionview:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    _collectionView=[[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:layout];
    [_collectionView setDataSource:self];
    [_collectionView setDelegate:self];

    [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
    [_collectionView setBackgroundColor:[UIColor redColor]];

    [self.view addSubview:_collectionView];

    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark Collection View Methods

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 15;
}

// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

    cell.backgroundColor=[UIColor greenColor];
    return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(50, 50);
}

请帮忙。

最佳答案

你想做的事情并不难。我已经创建了您正在查看的原型(prototype)。这就是您的 Storyboard的 View Controller 及其文档大纲的样子:

Storyboard

这是每个组件的代码

表格 View Controller

class TableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 5
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! MyTableViewCell

    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 160
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return (section%2 == 0) ? "Games we love" : "Apps we love"
}
}

MyTableViewCell

class MyTableViewCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {

@IBOutlet weak var collectionView: UICollectionView!

let imageNames = ["candy_crush", "cut_the_ropes", "game_1", "little_pet_shop", "zuba"]
let gameNames  = ["Candy Crush", "Cut the Ropes", "Arbitrary Game 1", "Littlest Pet Shop", "Zuba"]

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return imageNames.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) as! MyCollectionViewCell
    cell.imageView.image  = UIImage.init(named: imageNames[indexPath.row])
    cell.titleLabel.text  = gameNames[indexPath.row]
    cell.detailLabel.text = "Games"

    return cell
}
}

MyCollectionViewCell

class MyCollectionViewCell: UICollectionViewCell {

@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var detailLabel: UILabel!
}

这是它在模拟器上的样子

enter image description here

关于ios - 带有多个部分的水平滚动的 Collection View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40154238/

相关文章:

ios - 第一个单元格和最后一个单元格在 UICollectionView 中相互改变

ios - 获取设备当前方向(应用扩展)

ios - 自定义对象数组 - Swift

ios - 如何检查文件是否存在于用户定义的路径?

ios - 在 UICollectionView 中通过 NIB 添加自定义单元格

swift - 尝试为 UICollectionView Swift 添加 header 时出错

ios - 关于 ios 中的 block 的混淆

ios - 无法下载应用程序,此时无法安装应用程序

iphone - NSDictionary中的错误

ios - iPhone 消息应用程序的这个上滑菜单是如何实现的?