自定义tableview单元格多行

时间:2016-10-19 09:15:59

标签: ios objective-c uitableview ipad

This is samole image 这是我的json数据。这里是餐馆名称来一个和行名称来2有时行名称来更多然后如何打印自定义cell.please中的数据。帮助我

     "currency": "$",
    "state": "sale",
    "total": 243.1,
    "name": "a1238",
    "restaurant_name": "\"Food Court\" Biergarten",
    "date": "2016-10-16 07:52:07",
    "table_no": null,
    "so_id": 238,
    "lines": [
      {
        "line_status": "pending",
        "line_id": 2536,
        "line_price": 1,
        "line_qty": 1,
        "line_name": "Käse"
      },
      {
        "line_status": "pending",
        "line_id": 2579,
        "line_price": 7.8,
        "line_qty": 2,
        "line_name": "3 Musketiere (3x verschiedene Hefe 0,3l)"
      },

3 个答案:

答案 0 :(得分:1)

试试这样:

首先从error: no match for 'operator[]' (operand types are 'my_tuple {aka std::vector<std::tuple<int, int, int> >}' and 'std::vector<std::tuple<int, int, int> >::const_iterator {aka __gnu_cxx::__normal_iterator<const std::tuple<int, int, int>*, std::vector<std::tuple<int, int, int> > >}') 中获取您想要的回复中的所有值

NSMutableArray

之后在@interface ViewController () { NSMutableArray *restaurentsNamesArray; NSMutableArray *linesArray; NSMutableArray *linesCountArray; } 中为您从响应中获取的可变数组添加值

viewDidLoad

现在您只需要实现表视图委托方法,如下所示:

    - (void)viewDidLoad {
        [super viewDidLoad];

        restaurentsNamesArray = [[NSMutableArray alloc]init];

        linesArray = [[NSMutableArray alloc]init];

        linesCountArray = [[NSMutableArray alloc]init];
        NSError *error;

  // Do the stuff for get response from url here.
  // And give that request below.

        NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
                NSDictionary *main = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
                NSDictionary *result = [main valueForKey:@"result"];
                NSArray *saleorders = [result valueForKey:@"saleorders"];
                for (NSDictionary *dict in saleorders){
                    [restaurentsNamesArray addObject:[dict valueForKey:@"restaurant_name"]];
                    [linesArray addObject:[dict valueForKey:@"lines"]];
                }

        NSLog(@"%@",restaurentsNamesArray);
        NSLog(@"%@",linesArray);
    }

这里我只是将-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [restaurentsNamesArray count]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ NSArray *array; if (linesArray.count > section){ array = [linesArray objectAtIndex:section]; } return array.count; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [[UITableViewCell alloc]init]; NSArray *array; array = [linesArray objectAtIndex:indexPath.section]; NSDictionary *dict = [array objectAtIndex:indexPath.row]; cell.textLabel.text = [dict valueForKey:@"line_name"]; cell.detailTextLabel.text = [dict valueForKey:@"line_id"]; return cell; } -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return [restaurentsNamesArray objectAtIndex:section]; } 部分标题中的餐馆名称填充为tableView

如果您想要完全像上面显示的Android,您必须实现以下方法而不是NSString此方法

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

就像我在- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 50)]; [headerView setBackgroundColor:[UIColor darkGrayColor]]; UILabel *tempLabel=[[UILabel alloc]initWithFrame:CGRectMake((headerView.frame.size.width/2)-47,-32,300,94)]; tempLabel.backgroundColor=[UIColor clearColor]; tempLabel.shadowColor = [UIColor blackColor]; tempLabel.shadowOffset = CGSizeMake(0,2); tempLabel.textColor = [UIColor whiteColor]; tempLabel.font = [UIFont fontWithName:@"Helvetica" size:17.0]; tempLabel.font = [UIFont boldSystemFontOfSize:17.0]; tempLabel.text= [restaurentsNamesArray objectAtIndex:section]; [headerView addSubview:tempLabel]; return headerView; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section; { return 35; }

中填充lineName一样

如果您想要做更多事情,只需创建自定义cell.textLabel并按照您想要的方式创建布局。

就是这样。

干杯。

答案 1 :(得分:0)

将您的餐厅阵列用于

部分
numberOfSectionsInTableView{}

以及

"lines": [{}]数组
numberOfRowsInSection{}

您可以从下面提到的代码中获得更好的想法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number restaurant count
return [restaurantArray count];
}

并考虑到您将餐厅作为对象的多行:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of lines count.
return [objRestaurant.Lines count];
}

答案 2 :(得分:0)

首先创建一个餐厅类型数组,从json获取数据并将其添加到数组中

var RestaurantArray = [Restaurant]()

for index  in 0..<JSON["data"].count
{
let address = String(JSON["data"][index]["Address"])

            let CityId = JSON["data"][index]["CityId"].int

            let Description = String(JSON["data"][index]["Description"])

            let Name = String(JSON["data"][index]["Name"])
//create an object of Restaurant type and map the data into object and then add it into array that we have created .

var RestaurantModel:Restaurant?
RestaurantModel.address = address
RestaurantModel.cityID =  cityId
RestaurantModel.Description = Description

RestaurantArray.append(RestaurantModel)

}

现在在tableview中使用此数组

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return RestaurantArray.count
}

我希望这对你很有意义

干杯