我有一些标签问题。我创建了一个公共方法,从表视图中获取信息,并在3标签,文本视图中显示此信息,并从Web加载图片。我在表视图didSelectRowAtIndexPath方法中设置了所有变量,但是我有一些问题要显示该信息。我这样做了: 在表视图控制器中我调用了另一种方法:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.detailCharacterViewController = [[DetailCharacterViewController alloc] init];
[self.detailCharacterViewController setupDetailViewControllerWithName:[self.arrayCharacters[indexPath.row] objectForKey:@"name"] andSurname:[self.arrayCharacters[indexPath.row] objectForKey:@"surname"] andKind:[self.arrayCharacters[indexPath.row] objectForKey:@"kind"] andDescription:[self.arrayCharacters[indexPath.row] objectForKey:@"description"] andImage:[self.arrayCharacters[indexPath.row] objectForKey:@"URLpic"]];
}
我实现了这个方法:
- (void)setupDetailViewControllerWithName:(NSString*)name andSurname:(NSString *)surname andKind:(NSString*) kind andDescription:(NSString*)description andImage:(NSString*)url {
NSLog(@"name = %@", name);
self.labelName.text = name;
self.labelSurname.text = surname;
self.labelKind.text = kind;
self.textDescription.text = description;
NSURL *urlPic = [NSURL URLWithString:url];
NSData *dataPic = [NSData dataWithContentsOfURL:urlPic];
[self.imagePic setImage:[UIImage imageWithData:dataPic]];
}
如果我查看日志,我会看到正确的事情,但如果我在iPhone或iPhone模拟器上查看GUI,它将保持空白。这段代码有什么问题? 谢谢你的建议。
@Alex Blundell
#import <UIKit/UIKit.h>
@interface DetailCharacterViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *labelName;
@property (weak, nonatomic) IBOutlet UILabel *labelSurname;
@property (weak, nonatomic) IBOutlet UILabel *labelKind;
@property (weak, nonatomic) IBOutlet UIImageView *imagePic;
@property (weak, nonatomic) IBOutlet UITextView *textDescription;
- (void)setupDetailViewControllerWithName:(NSString*)name andSurname:(NSString *)surname andKind:(NSString*) kind andDescription:(NSString*)description andImage:(NSString*)url;
@end
答案 0 :(得分:2)
问题在于,当您拨打DetailCharacterViewController
时,您的setupDetailViewControllerWithName:...
视图尚未加载,因此没有任何插座已连接(尚未)。通过alloc-init实例化视图控制器不自动加载其视图。
您可以通过在设置方法开头调用[self view]
来强制加载视图。这是有效的,因为访问view
属性会自动加载视图(如果之前未加载)。
或者,您可以制作视图控制器的name
,surname
等NSString
属性,并在viewDidLoad
中设置相应的标签。
答案 1 :(得分:1)
您是否正在使用Interface Builder / Storyboard来设计界面?您是否确保为每个UITextField / View连接IBOutlets?
您应该在视图控制器类的头文件中标识对象,并确保它们以IBOutlet为前缀,以便它们出现在Interface Builders连接窗格中。 E.g。
IBOutlet UITextField labelName;
[...]
然后,您需要转到IB并转到视图控制器的连接窗格以连接每个文本字段/视图。
答案 2 :(得分:0)
这个问题也发生在我身上。
这与iOS实际上非常最终连接你的网点这一事实有关。
如果在setupDetailViewControllerWithName:
中放置一个断点并检查您的IBOutlet变量,它们将为零。这就是你看到空白视图的原因。 (好的老nil错误)
我将要解决的问题是在DetailCharacterViewController
类中声明属性。 (例如@property (copy, nonatomic) NSString* name
)。
在您致电setupDetailViewControllerWithName:
的地方,请设置这些属性,例如:
self.detailCharacterViewController.name = name;
最后在DetailCharacterViewController
的{{1}}中,您可以使用保存的属性设置标签的值。 (那些商店肯定会被连接起来)。
(顺便说一下,viewDidLoad:
也存在这个问题。目标视图控制器的出口在prepareForSegue:
中仍然是零。所以你不能直接在那里设置它们。