【问题标题】:Create a textview in a for loop in Objective-C在 Objective-C 的 for 循环中创建一个文本视图
【发布时间】:2015-04-26 20:36:56
【问题描述】:

我正在从 mysql 数据库中检索数据并希望在文本视图中显示它。因此,我为每条数据创建了一个 for 循环。问题是它只创建一个文本视图,因此只显示第一条检索到的数据。我的代码如下:

-(void) getData:(NSData *) data {
    NSError *error;
    json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
}

-(void) start {
    //NSLog(@"%lu", (unsigned long)[json count]);
    NSURL *url = [NSURL URLWithString:kGETUrl];
    NSData *data = [NSData dataWithContentsOfURL:url];
    [self getData:data];

    NSIndexPath *indexPath;
    NSDictionary *info = [json objectAtIndex:indexPath.row];

    for (int i = 0; i < [json count]; i++)
    {
        //NSLog(@"%@", json);

        UITextView *myTextView = [[UITextView alloc] init];
        myTextView.text = [info objectForKey:@"title"];
        [self.view addSubview:myTextView];
        [myTextView sizeToFit];
    }
}

【问题讨论】:

  • json 中似乎只有一个对象。
  • 它有 5,因为当我执行 NSLog 时它会打印 5,而当我执行 json 的 NSLog 时,它也会打印 5 件事
  • 给每个文本视图一个不同的框架。目前,您使用相同的框架创建它们,因此您只能看到最后一个。
  • 一个 UITableview 可能是一个更好的主意
  • 好吧,当我打印 Json 计数时它返回 0。这没有意义,因为当我执行以下操作时: NSLog(@"%@", json);它返回 5 个不同的东西

标签: ios objective-c json uitextview


【解决方案1】:

json 是一个数组,info 是 json 中的一个字典。

您在 json 上循环五次,但打印相同的信息。你需要:

int yPos = 0;
for (int i = 0; i < [json count]; i++)
{
    //NSLog(@"%@", json);
    info = [json objectAtIndex:i];
    UITextView *myTextView = [[UITextView alloc] init];
    myTextView.text = [info objectForKey:@"title"];
    [self.view addSubview:myTextView];
    [myTextView sizeToFit];
    yPos += myTextView.frame.size.height;
    myTextView.frame = CGRectMake(0, yPos, myTextView.frame.size.width, myTextView.frame.size.height);

}

【讨论】:

  • 另外,如何为每个文本视图创建一个框架?
  • 目前它打印所有的数据在彼此之上
  • 它更新了我的答案。我认为 [myTextView sizeToFit] 应该为您的 textview 创建适当的大小和高度,但我不太确定,因为 textview 是可滚动的。如果用户不应该能够编辑它,那么使用 UILabel 可能会更好
  • 另外,如果文本应该显示两个 [info objectForKey:@""] 东西,那么我将如何添加第二个。我可以添加一个逗号并添加它吗?
  • 以您想要的方式连接字符串。即创建一个 NSString *text = [[info objectForKey:@"title"] stringByAppendingString:[info objectForKey:@"body"]];并将 textview 文本设置为该文本。有很多方法可以连接字符串,所以如果你想要更高级的东西,请查看 NSString documentation
猜你喜欢
  • 2015-07-10
  • 2016-01-14
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
相关资源
最近更新 更多