设置UITextView的文本属性后,屏幕不会相应更新

时间:2011-06-16 04:12:27

标签: objective-c ios ipad uitextview

我有视图控制器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但是徒劳无功。我错过了什么吗?

提前致谢。

2 个答案:

答案 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之前强制加载视图来解决此问题。