如何在一个UITableView中创建多个列表? IOS斯威夫特

时间:2015-04-20 06:35:38

标签: ios objective-c uitableview swift

有人能帮助我吗?我将UITableView分割为两个registeredunregistered这是我的视图看起来像

enter image description here

但我不知道如何将我的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

我现在所拥有的是简单列表,一个已注册和未注册的列表。我想知道我怎么能实现这一点。

任何评论或建议或链接都​​会有很大帮助,因为我不知道如何开始。提前致谢

4 个答案:

答案 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一样。