iOS:如何在tableview中显示响应参数?

时间:2016-12-07 10:12:53

标签: ios objective-c iphone uitableview

我正在尝试在UITableView内设置UIViewController。我正在使用故事板。但是在模拟器上运行时,tableview不会显示任何内容。以下是我在Xcode中尝试的内容:

1)在UIView上拖动表格视图。

2)连接它的插座(dataSourcedelegate)。

3)我得到服务器的响应,如:

[{"email_id":"adas@faga.gs","id":66,"mobile_no":"1236547895","name":"asad","relation":"dsfs"},{"email_id":"raj@ghj.com","id":67,"mobile_no":"5632145412","name":"raj","relation":"xyz"}]

4)现在我想做什么:

在我要显示的第一个单元格中, name:asad mobile:1236547895 email:adas@faga.gs relation:dsfs

在第二个小区, name:raj mobile:5632145412 email:raj@ghj.com relation:xyz

但我不知道如何做到这一点。任何人都可以解决我的问题。帮助将是可观的。

我喜欢以下方式,但它不起作用。

a)使用Objective-C类模板向项目添加新文件。将其命名为EmergencyContactCell并将其命名为UITableViewCell的子类。

b)然后在 EmergencyContactCell.h

@interface EmergencyContactCell : UITableViewCell

@property (nonatomic, weak) IBOutlet UILabel *name;
@property (nonatomic, weak) IBOutlet UILabel *email;
@property (nonatomic, weak) IBOutlet UILabel *mobile;
@property (nonatomic, weak) IBOutlet UILabel *relation;

c)然后MainStoryboard.storyboard,选择prototypecell并在Identity Inspector中将其类更改为EmergencyContactCell

d)然后连接所有插座

e)我正在使用AFNetworking从服务器接收响应,当我得到响应时,之后我喜欢以下方式:

NSArray *ResponseArray = [NSJSONSerialization JSONObjectWithData: responseObject options: kNilOptions error: nil];

if (ResponseArray.count >0)
{
   menuItems = [ResponseArray mutableCopy];
   [yourTableviewname reloadData];
 }

f)并将其显示在单元格上,

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [menuItems count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"EmergencyContactCell";

    //static NSString *simpleTableIdentifier = @"cell";
    EmergencyContactCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

   // UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];



//    NSDictionary *content = [menuItems objectAtIndex:indexPath.row];
//    cell.textLabel.text = [NSString stringWithFormat:@"Name:%@, Mobile:%@,  Email:%@,  Relation:%@",content[@"name"],content[@"mobile_no"],content[@"email_id"],content[@"relation"]];
//    


    return cell;
}

我终于得不到该做什么了?

3 个答案:

答案 0 :(得分:1)

<强>步骤1

  

不需要这个

NSArray *ResponseArray = [NSJSONSerialization JSONObjectWithData: responseObject options: kNilOptions error: nil];

NSMutableArray *finalArray = [NSMutableArray array];
for (NSDictionary *temp in ResponseArray) {
    [finalArray addObject:temp[@"name"]];
}
NSLog(@"%@",finalArray);

if(finalArray != nil && finalArray.count > 0){

    menuItems=[NSArray arrayWithArray:finalArray];
    NSLog(@"menu items: %@",menuItems);


}
else{
    NSLog(@"zero values from server");
}

只需

 NSArray *ResponseArray = [NSJSONSerialization JSONObjectWithData: responseObject options: kNilOptions error: nil];

if (ResponseArray.count >0)
{
   menuItems = [ResponseArray mutableCopy];
   [yourTableviewname reloadData];
 }

<强>步骤-2

您的答案继续

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
     NSDictionary *content = [menuItems objectAtIndex:indexPath.row];  
    cell.textLabel.text = [NSString stringWithFormat:@"Name:%@, Mobile:%@,  Email:%@,  Relation:%@",content[@"name"],content[@"mobile_no"],content[@"email_id"],content[@"relation"]];



    return cell;
}

更新了答案

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"EmergencyContactCell";


    EmergencyContactCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


    NSDictionary *content = [menuItems objectAtIndex:indexPath.row];

    cell.name.text = [NSString StringWithFormat:@"Name:%@",content[@"name"]];
     cell.email.text = [NSString StringWithFormat:@"email:%@",content[@"email"]];
      cell.mobile.text = [NSString StringWithFormat:@"mobile:%@",content[@"mobile"]];
       cell.relation.text = [NSString StringWithFormat:@"relation:%@",content[@"relation"]];


    return cell;
}

答案 1 :(得分:1)

你需要做两件事

获得响应后将其设置为一个NSArray。声明NSArray     全球性的。你的代码应该像是     public function index() { $users = User::search()->orderBy('name')->paginate(20); return view('home', compact('users')); }     从服务器获得。然后拨打NSArray *arrayPersonalInfo = responseObject; // responseObject is response

现在将表格视图方法更新为

[tableView reloadData];

如果需要,添加其他表视图方法 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return arrayPersonalInfo.count; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *simpleTableIdentifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; } NSDictionary *dictionaryMenu = [arrayPersonalInfo objectAtIndex:indexPath.row]; // It will save dictionary object of index cell.textLabel.text = [NSString stringWithFormat:@"Name:%@ Mobile:%@ Email:%@ Relation:%@",[dictionaryMenu valueForKey:@"name"],[dictionaryMenu valueForKey:@"mobile_no"],[dictionaryMenu valueForKey:@"email_id"],[dictionaryMenu valueForKey:@"relation"]]; cell.textLabel.numberOfLines = 0; cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; return cell; } heightForRowAtIndexPath

答案 2 :(得分:0)

如果您更喜欢使用故事板,您实际上可以在原型单元格中添加标签,确保正确设置原型的cellIdentifier以在代码中使用它。然后为您的标签设置唯一标签。从您的代码中,您可以从单元格的contentView调用viewWithTag来获取标签并编辑它的文本属性。