- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 TableView ,它是从下面列出的可变数组加载的。但是我需要为数组中的每个项目分配一个 ID 并在项目旁边有一个复选框。基本上它是我们搜索的偏好,它让用户根据勾选的复选框确定优先级。所以我想保存哪些项目被勾选到 plist 或类似的。
数组的加载方式如下:
arryTableIconsText = [[NSMutableArray alloc] init];
[arryTableIconsText addObject:@"Facilities for partially sighted or blind people"];
[arryTableIconsText addObject:@"An 'assistance dogs welcome' policy"];
[arryTableIconsText addObject:@"Disabled access facilities for wheelchair users (with assistance)"];
*more items added here*
arryTableIcons = [[NSMutableArray alloc] init];
[arryTableIcons addObject:@"visuallyImpaired_off.png"];
[arryTableIcons addObject:@"guidedogs_off.png"];
[arryTableIcons addObject:@"wheelchairassist_off.png"];
*more items added here*
然后像这样加载到表中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:17.0];
cell.textLabel.text = [arryTableIconsText objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:[arryTableIcons objectAtIndex:indexPath.row]];
return cell;
}
结果如下:
但我不知道从这里到哪里才能将其转换为保存 ID 的每个单元格右侧的复选框?
任何提示真的会很感激,汤姆
最佳答案
使用 NSMutableIndexSet
实例变量并用被检查的单元格的索引填充它。
然后在 cellForRowAtIndexPath
方法中,将单元格的附件类型设置为 UITableViewCellAccessoryTypeCheckmark
或 UITableViewCellAccessoryTypeNone
,具体取决于 indexPath.row 所在的位置NSMutableIndexSet 与否。
最后,当单元格被点击时,如果 indexPath.row 还没有被添加到索引集中,或者如果它已经存在则将其删除,以切换相应单元格的状态,然后调用 reloadData
在 tableView 上。
我在你的代码中也看到你不熟悉 UITableViewCells 的重用机制。您应该阅读 Apple 文档中的“Table View Programming Guide”并学习如何以更高效和 react 性的方式(在 react 性和内存占用方面)实现 cellForRowAtIndexPath
// Let selectedCellIndexes be an instance variable in your .h of type NSMutableIndexSet*
// Initialize it (probably at the same place you initialise your texts & icons, once for all, probably in your init method
selectedCellIndexes = [[NSMutableIndexSet alloc] init];
然后填充单元格:
-(UITableViewCell*)tableView:(UITableView*)tv cellForRowAtIndexPath:(NSIndexPath*)indexPath {
// Try to recycle and already allocated cell (but not used anymore so we can reuse it)
UITableViewCell* cell = [tv dequeueCellWithReuseIdentifier:...];
if (cell == nil) {
// If we didn't manage to get a reusable (existing) cell to recycle it
// then allocate a new one and configure its general properties common to all cells
cell = [[[UITableViewCell alloc] initWithStyle:... reuseIdentifier:...] autorelease];
// ... configure stuff that are common to all your cells : lineBreakMode, numberOfLines, font... once for all
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:17.0];
}
// Then here change the stuff that are different between each cell
// (this code will be executed if the cell has just been allocated as well as if the cell is an old cell being recycled)
cell.textLabel.text = [arryTableIconsText objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:[arryTableIcons objectAtIndex:indexPath.row]];
cell.accessoryType = [selectedCellIndexes containsIndex:indexPath.row] ? UITableViewCellAccessoryTypeCheckmark : UITableViewCellAccessoryTypeNone;
return cell;
}
最后,切换复选标记:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ([selectedCellIndexes containsIndex:indexPath.row]) {
[selectedCellIndexes removeIndex:indexPath.row];
} else {
[selectedCellIndexes addIndex:indexPath.row];
}
[tableView reloadData];
}
关于iphone - 从 MutableArray 加载的 UITableView 变成一个复选框列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051690/
我正在开发一个 iOS app.NSMutableArray value Not Pass on NSArray.This Array can be count on table view - (N
我有一个数组 (NSMutableArray) 的字典 (NSMutableDictionary) 存储图像和一些字符串。 @interface SelectViewController () {
我的java代码看起来像这样: for(int i=0;i
这个问题在这里已经有了答案: Deleting objects within a for loop from a NSMutableArray (2 个答案) 关闭 8 年前。
Xcode 告诉我下面的代码在内存泄漏方面存在一些问题。 @property (nonatomic, retain) NSMutableArray *naw_rows; -(void) loadTab
我有一个保留并存储多个对象的可变数组。在某一时刻,一个对象可能会变成零。当这种情况发生时,应用程序将崩溃,因为数组不能有 nil 对象。想象一下类似的事情 [对象1,对象2,对象3,无]; 那么,ob
我已经检查了文档,但我似乎无法弄清楚我应该如何创建 Ember.MutableArray 的实例。我试过: Ember.MutableArray([1,2,3,4,5]) 这不起作用,因为 Mutab
NSUInteger index, count = [delegate.thumbArr count]; for (index = 0; index < count; index++) {
我有一个在应用程序启动时加载的数组,它获取正确的数据并填充该数组,但是一旦我进入 tableviewcontroller,它就会说该数组为空。 这是我获取数据的地方 AppDelegate.h @in
我正在为我的 tableViewController 使用 FetchedResultController 的东西,一旦我得到结果,我就用获取的对象创建一个 NSArray self.sortedAr
我有一个 TableView ,它是从下面列出的可变数组加载的。但是我需要为数组中的每个项目分配一个 ID 并在项目旁边有一个复选框。基本上它是我们搜索的偏好,它让用户根据勾选的复选框确定优先级。所以
这个问题在这里已经有了答案: Compare 2 nsmutablearray and get different object to third array in ios (4 个答案) 关闭
) 我有一个可变的 restaurantObjects 序列化形式 json 数据数组,如果当前对象名为 restaurantDetail 我可以像这样访问 corrdinates float x =
在我的 UITableView 中,我有多个带有日期标题的部分。日期在 NSMutableArray 中按日期排序。我的部分显示了正确的日期,工作正常,numberofrowsinnsection 也
我在它自己的类中有一个“炸弹”CCSprite(如果不使用 cocos2d 的人读到这个,CCSprite 几乎是一个 NSObject)。 CCSprite 文件如下所示: Bomb.h: #imp
我尝试管理多个 View 并将这些引用保存在一个可变数组中。如果我既在可变数组中添加 View 引用,又作为 subview 添加到 View 中。然后引用计数似乎不正确。会导致bad access错
- (NSArray *)map:(id (^)(id))block { NSEnumerator * enumerator = self.objectEnumerator; NSMu
我制作了一个 CGpoints 的 NSMUtableArray 并通过将它们子类化为 NSValue 来存储它们,但我无法获取这些值。在这里,我做了什么。 CGPoint graphPoint;
我不明白为什么我在这段代码中收到“发送到不可变对象(immutable对象)的变异方法”。该数组必须以某种方式是不可变的,但我不知道为什么。 界面: @interface SectionsVi
我是一名优秀的程序员,十分优秀!