[英]iOS 6 issue during setting text on a label
我有一些标签问题。 我制作了一个公共方法,该方法从表格视图中获取信息,并以3个标签,文本视图的形式显示此信息,并从网络上加载图片。 我在表格视图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,它将保持空白。 此代码有什么问题? 感谢您的建议。
@亚历克斯·布伦德尔
#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
问题是,当您调用setupDetailViewControllerWithName:...
,尚未加载DetailCharacterViewController
的视图,因此尚未连接任何插座。 通过实例化的alloc-INIT视图控制器不会自动加载其视图。
您可以通过在设置方法的开头调用[self view]
来强制加载视图。 之所以可行,是因为访问view
属性会自动加载视图(如果之前未加载过)。
另外,您可以设置视图控制器的name
, surname
等NSString
属性,并在viewDidLoad
设置相应的标签。
您是否正在使用Interface Builder / Storyboards设计界面? 您确定要为每个UITextField / View连接IBOutlet吗?
您应该在视图控制器类的头文件中标识对象,并确保它们以IBOutlet作为前缀,以便它们出现在Interface Builders连接窗格中。 例如
IBOutlet UITextField labelName;
[...]
然后,您需要转到IB并转到连接窗格,以使视图控制器连接每个文本字段/视图。
这个问题也发生在我身上。
这与iOS实际上真的很晚才联系您的渠道有关。
如果在您的setupDetailViewControllerWithName:
放置一个断点并检查IBOutlet变量,则它们将为nil。 这就是为什么您看到空白视图的原因。 (好旧的nil错误)
我要做的解决方法是在DetailCharacterViewController
类中声明属性。 (例如@property (copy, nonatomic) NSString* name
)。
在调用setupDetailViewControllerWithName:
的地方,设置这些属性,例如:
self.detailCharacterViewController.name = name;
最后,在DetailCharacterViewController
的viewDidLoad:
,使用保存的属性设置标签的值。 (然后确保将插座连接起来)。
(顺便说一句,对于prepareForSegue:
也存在此问题。目标视图控制器的出口在prepareForSegue:
仍然为零。因此,您还不能直接在此处设置它们)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.