我有视图控制器A(FileListViewController)和B(TextFileViewController)。 A是一个UITableViewController。我现在正在做的是在控制器A中选择一行后,我加载一个文本文件并在控制器B的UITextView中显示该文本。
以下是我的两个控制器的标题和实现部分(一些代码被删节)。
FileListViewcontroller接口:
@interface FileListViewController : UITableViewController {
NSMutableArray * fileList;
DBRestClient* restClient;
TextFileViewController *tfvc;
}
@property (nonatomic, retain) NSMutableArray * fileList;
@property (nonatomic, retain) TextFileViewController *tfvc;
@end
FileListViewController实现:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DBMetadata *metaData = [fileList objectAtIndex:indexPath.row];
if(!metaData.isDirectory){
if([Utils isTextFile:metaData.path]){
if(!tfvc){
tfvc = [[TextFileViewController alloc] init];
}
[self restClient].delegate = self;
[[self restClient] loadFile:metaData.path intoPath:filePath];
[self.navigationController pushViewController:tfvc animated:YES];
}
}
- (void)restClient:(DBRestClient*)client loadedFile:(NSString*)destPath {
NSError *err = nil;
NSString *fileContent = [NSString stringWithContentsOfFile:destPath encoding:NSUTF8StringEncoding error:&err];
if(fileContent) {
[tfvc updateText:fileContent];
} else {
NSLog(@"Error reading %@: %@", destPath, err);
}
}
这是TextFileViewController的接口:
@interface TextFileViewController : UIViewController {
UITextView * textFileView;
}
@property (nonatomic, retain) IBOutlet UITextView * textFileView;
-(void) updateText:(NSString *) newString;
@end
TextFileViewController实现:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)] autorelease];
textFileView = [[UITextView alloc] init];
}
- (void) updateText:(NSString *)newString {
NSLog(@"new string has value? %@", newString);
[textFileView setText:[NSString stringWithString:newString]];
NSLog(@"print upddated text of textview: %@", textFileView.text);
[[self textFileView] setNeedsDisplay];
}
(void)restClient:loadedFile:将在disSelectRowAtIndexPath方法中完成loadFile:intoPath:之后调用。
在TextFileViewController的updateText方法中,从NSLog我看到text属性已正确更新。但屏幕不会相应更新。我试过setNeedsDisplay但是徒劳无功。我错过了什么吗?
提前致谢。
答案 0 :(得分:1)
In - [TextFileViewController viewDidLoad]你正在创建一个UITextView,但是它的框架从未被设置,并且它没有被添加到视图层次结构中。
尝试更改此内容:
textFileView = [[UITextView alloc] init];
到此:
textFileView = [[UITextView alloc] initWithFrame:[[self view] bounds]];
[[self view] addSubview:textFileView];
答案 1 :(得分:0)
问题是在textFileView
的{{1}}方法中创建了viewDidLoad
。当您调用TextFileViewController
时(在updateText
被推送之前发生这种情况),尚未调用此方法。
您可以通过在调用TextFileViewController
之前强制加载视图来解决此问题。