registered
和unregistered
这是我的视图看起来像
但我不知道如何将我的json数据绘制成这个。这是我的数据
[
{
"itemName": "Glass 101",
"status": 1
},
{
"itemName": "Glass 102",
"status": 0
},
{
"itemName": "Glass 103",
"status": 0
},
{
"itemName": "Glass 104",
"status": 1
},
{
"itemName": "Glass 105",
"status": 0
},
{
"itemName": "Glass 106",
"status": 1
}
]
如果状态等于0
,我需要执行的操作我将其放入not registered
然后1
我将其放入registered
。
我现在所拥有的是简单列表,一个已注册和未注册的列表。我想知道我怎么能实现这一点。
任何评论或建议或链接都会有很大帮助,因为我不知道如何开始。提前致谢
答案 0 :(得分:3)
让我们考虑您的数据存储在名为tempArray的数组中。然后这样做:
NSMutableArray *registered = [[NSMutableArray alloc] init];
NSMutableArray *notRegistered = [[NSMutableArray alloc] init];
for (int i = 0 ; i < tempArray.count ; i++) {
if ([[[tempArray objectAtIndex:i] objectForKey:@"status"] boolValue]) {
[registered addObject:[tempArray objectAtIndex:i]];
}
else{
[notRegistered addObject:[tempArray objectAtIndex:i]];
}
}
然后在UITableView&#39; numberOfRowsInSection
中执行此操作:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section == 1){
return registered.count;
}
return notRegistered.count;
}
然后在cellForRowAtIndexPath
中执行此操作:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
}
if (indexpath.section == 0) {
cell.textLabel.text = [[notRegistered objectAtIndex:indexpath.row] objectForKey:@"itemName"];
}
else {
cell.textLabel.text = [[registered objectAtIndex:indexpath.row] objectForKey:@"itemName"];
}
return cell;
}
答案 1 :(得分:2)
实施此数据源方法。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
使用filteredArrayUsingPredicate
获取两个不同的数组对象,一个用于状态0 ,另一个用于状态1
然后实施此方法。
-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section{
if(section == 0){
return [statusZero count]
}
else{
return [statusOne count]
}
}
最后使用此方法添加单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.section == 0){
// add status 1 array cell
}
else{
// add status 0 array cell
}
return cell
}
答案 2 :(得分:1)
您可以根据您的条件解析您的json并创建两个数组status = 0
,将当前索引的整个对象放在not_registered_Array
中,如果status == 1
,则将整个对象放入当前索引中registered_Array
NSMutableArray *registered_Array = [[NSMutableArray alloc] init]; //Define this, out of any method, may be above `viewDidLoad`
NSMutableArray *not_registered_Array = [[NSMutableArray alloc] init];
for (int i = 0 ; i < yourRespomseArray.count ; i++) {
if ([[[yourRespomseArray objectAtIndex:i] objectForKey:@"status"] boolValue]) {
[registered_Array addObject:[yourRespomseArray objectAtIndex:i]];
}
else{
[not_registered_Array addObject:[yourRespomseArray objectAtIndex:i]];
}
}
从该2数组中,您可以按照部分返回行数,并从中设置单元格值。
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 2
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
println(prefs.valueForKey("CAT_ID"))
if (section == 0 ){
return not_registered_Array.count
}else{
return registered_Array.count
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell : UITableViewCell = ...
if (section == 0 ){
let dicObject:NSDictionary = not_registered_Array.objectAtIndex(indexPath.row) as! NSDictionary
cell.textLabel?.text = dicObject.valueForKey("itemName")
}else{
let dicObject:NSDictionary = registered_Array.objectAtIndex(indexPath.row) as! NSDictionary
cell.textLabel?.text = dicObject.valueForKey("itemName")
}
return cell
}
HTH,享受编码!!
答案 3 :(得分:0)
我不确定您是否无法将JSON解析为某个对象,或者您不知道如何在多个部分中分割UITableView
。
根据对象的用法,您需要解析JSON并使用Dictionary中的值实例化对象(数组中的每个记录都可以简单地放在Dictionary<String, AnyObject>
中)。例如,请看:
http://www.raywenderlich.com/82706/working-with-json-in-swift-tutorial
我不是说这是将JSON解析为对象的最佳方法,而是一种让你入门的方法。
使用filteredArrayUsingPredicate
将数组过滤到属性上的两个数组。所以像这样:
let myCompleteArray = {};
var registered = myCompleteArray.filter ({ $0.status == true });
var unregistered = myCompleteArray.filter( { $0.status == false });
然后你需要实现你的UITableViewDataSource
,如下所示:
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 2;
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (section == 0) {
return registered.count;
}
else {
return unregistered.count;
}
}
当然,您需要更改cellForRowAtIndexPath
以检查正在呈现的部分(就像上面的numberOfRowsInSection
一样。