我有一个测试应用程序,我已经为我的工作流程的一部分。我想要实现的是向用户展示他们为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;
}
答案 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;
}