NSDictionary 可以与 iPhone 上的 TableView 一起使用吗?
在 UITableViewController 子类中,需要实现一些方法来加载数据并处理行选择事件:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1; //there is only one section needed for my table view
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [myList count]; //myList is a NSDictionary already populated in viewDidLoad method
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease ];
}
// indexPath.row returns an integer index,
// but myList uses keys that are not integer,
// I don't know how I can retrieve the value and assign it to the cell.textLabel.text
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Handle row on select event,
// but indexPath.row only returns the index,
// not a key of the myList NSDictionary,
// this prevents me from knowing which row is selected
}
NSDictionary 应该如何与 TableView 一起使用?
完成此操作的最简单方法是什么?
In a UITableViewController subclass, there are some methods that need to be implemented in order to load the data and handle the row selection event:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1; //there is only one section needed for my table view
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [myList count]; //myList is a NSDictionary already populated in viewDidLoad method
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease ];
}
// indexPath.row returns an integer index,
// but myList uses keys that are not integer,
// I don't know how I can retrieve the value and assign it to the cell.textLabel.text
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Handle row on select event,
// but indexPath.row only returns the index,
// not a key of the myList NSDictionary,
// this prevents me from knowing which row is selected
}
How is NSDictionary supposed to work with TableView?
What is the simplest way to get this done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不明白为什么你想使用字典(继承无序)来完成需要回答有序问题(行)的任务,但我认为你已经从某个地方有了一本字典,并且无法更改它。
如果是这种情况,您必须定义要显示键的顺序,从而隐式导出数组。一种方法是按字母顺序排列,另一种方法如下:
value 现在是在 tableView:didSelectRowAtIndexPath: 的情况下选择的对象,或者是在 tableView:cellForRowAtIndexPath: 中进行单元格处理所需的对象:
如果底层 NSDictionary 发生更改,则需要执行此操作必须重新加载(
[myTable reload]
等)UITableView。I do not understand why you want to use a dictionary (which is inheritly unordered) for a task that requires answers to ordered questions (rows), but i take it that you have a dictionary already from somewhere and cannot change that.
If that is the case, you have to define an order you want to display the keys in, thereby deriving an array implicitly. One way to do this is alphabetically order another one is the following:
value is now the object selected in the case of tableView:didSelectRowAtIndexPath: or the object you need for your cell processing in tableView:cellForRowAtIndexPath:
If the underlying NSDictionary changes, you do have to reload (
[myTable reload]
or the like) the UITableView.是的。下面是我们的做法:
在我们的 xml 解析器中,我们有一个方法,它将 xml 加载到一个名为 dict 的字典中:
这个方法
}
在 RadioData 类中,我们有一个实例变量:
以及一堆方法
和一个属性
最后在ViewController 当我们初始化我们使用的框架时:
在 cellForRowAtIndexPath 中我们有:
在 didSelectRowAtIndexPath 中:
这可能比你想要的更多,但这是总体轮廓。
Yes. Here is how we have done it:
In our xml parser we have this method which loads the xml into a dictionary called dict:
And this method
}
In the RadioData class we have an instance variable:
and a bunch of methods
and a property
Finally in the ViewController when we init the frame we use:
and inside cellForRowAtIndexPath we have:
and in didSelectRowAtIndexPath:
This is probably more than you wanted but that is the general outline.