使用CollectionView在用户键入时添加切片效果

时间:2013-08-12 21:22:33

标签: ios ios6 uiviewcontroller uicollectionview uicollectionviewcell

我有一个测试应用程序,我已经为我的工作流程的一部分。我想要实现的是向用户展示他们为Word风格游戏输入的内容的一种奇特方式。

目前这是方法,但可能有更容易/更好的路线。我有一个UITextField未向用户显示,键盘显示在viewDidLoad上。我想要发生的是每次在键盘上按下一个字母时,显示字母大写的新瓷砖被添加到上面的屏幕区域,即'W',然后另一个字母将意味着添加另一个瓷砖,即'我'旁边以前......

我已设置UICollectionView和带有标签的自定义单元格,即全部。 VC是UICollectionView的dataSource。 UITextField也将delegate设置为self(VC)。

我无法弄清楚如何创建每个字母的瓷砖(单元格)。

#pragma mark - 
#pragma mark - Key board delegate methods
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSLog(@"%s",__PRETTY_FUNCTION__);
NSString *lastLetterTyped = [textField.text substringFromIndex:[textField.text length] - 1];

[self.wordArray addObject:lastLetterTyped];
[self.tileCollectionView reloadData];

    return YES;
}

#pragma mark - 
#pragma mark - Collection View Data Source Methods
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 3;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    // we're going to use a custom UICollectionViewCell, which will hold an image and its label
    //
    WordCVCell *cell = [cv dequeueReusableCellWithReuseIdentifier:kCellID forIndexPath:indexPath];

    // make the cell's title the actual NSIndexPath value
    NSString *lastLetter = [self.typedWord substringFromIndex:[self.typedWord length] - 1];
    cell.label.text = lastLetter;

    return cell;
}

2 个答案:

答案 0 :(得分:0)

每次用户键入字符时,您都需要添加一个NSMutableArray。为此,您需要将控制器连接到UITextfieldDelegate。之后,每次添加到此数组时,您需要调用[collectionView reloadData],并且您的项目数将为[myMutableCharacterArray count];

所以基本上每次用户输入一个字母时,将其添加到一个可变数组中并调用[collectionView reload data]来刷新集合视图。

答案 1 :(得分:0)

你的

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

应该读作

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    [self.wordArray count];
}

这将触发以下与数组中的对象相同的次数。

-(UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    // we're going to use a custom UICollectionViewCell, which will hold an image and its label
    //
    WordCVCell *cell = [cv dequeueReusableCellWithReuseIdentifier:kCellID forIndexPath:indexPath];

    // make the cell's title the actual NSIndexPath value
    NSString *lastLetter = [self.wordArray objectAtIndex:indexPath.row];
    cell.label.text = lastLetter;

    return cell;
}