作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 xib 中定义了一个 UITableViewCell。这个 UITableViewCell 有一个 UITextField,叫做 itemText。此 UITableViewCell 也采用其他格式。
在表格中的所有单元格中,我想要 xib 中定义的 UITextField。
但是,在一个单元格中我想使用不同的 UITextField,我以编程方式定义它,称为 FinanceTextField。
在 cellforindexpath 方法中,我使用了以下行:
cell.itemText = [[[FinanceTextField alloc] initWithFrame:CGRectMake(0, 0, 300, 50)] autorelease];
没用?为什么?
最佳答案
创建两个 UITableViewCell 类。一个用于您的常规 View ,一个具有 FinanceTextField。从 xibs 加载它们。在您的 cellForIndexPath 中,确定您要使用哪个单元格,然后加载(并重用)适当的类型。即使只有一个单元格使用不同的单元格,它也会全部工作。事实上,您可以在同一个表格中包含所有不同类型的单元格,所有行列式都在行中,例如第一行带有常规标签文本,第二行带有文本字段,第三行带有按钮,等等。
您可以查看一个示例项目来执行此操作。苹果开发者网站上的“食谱”示例。以下是您可能感兴趣的部分代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
// For the Ingredients section, if necessary create a new cell and configure it with an additional label for the amount. Give the cell a different identifier from that used for cells in other sections so that it can be dequeued separately.
if (indexPath.section == INGREDIENTS_SECTION) {
NSUInteger ingredientCount = [recipe.ingredients count];
NSInteger row = indexPath.row;
if (indexPath.row < ingredientCount) {
// If the row is an ingredient, configure the cell to show the ingredient name and amount.
static NSString *IngredientsCellIdentifier = @"IngredientsCell";
cell = [tableView dequeueReusableCellWithIdentifier:IngredientsCellIdentifier];
if (cell == nil) {
// Create a cell to display an ingredient.
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:IngredientsCellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryNone;
}
Ingredient *ingredient = [ingredients objectAtIndex:row];
cell.textLabel.text = ingredient.name;
cell.detailTextLabel.text = ingredient.amount;
} else {
// If the row is not an ingredient the it's supposed to add an ingredient
static NSString *AddIngredientCellIdentifier = @"AddIngredientCell";
cell = [tableView dequeueReusableCellWithIdentifier:AddIngredientCellIdentifier];
if (cell == nil) {
// Create a cell to display "Add Ingredient".
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:AddIngredientCellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
cell.textLabel.text = @"Add Ingredient";
}
这只是展示如何创建不同标识符的项目的一部分。从这里你可以自己得到它......
关于iphone - 如何用不同的 UITextField 覆盖 UITextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283317/
我是一名优秀的程序员,十分优秀!