После установки свойства текста UITextView, экран не обновляется соответственно - PullRequest
0 голосов
/ 16 июня 2011

У меня есть контроллеры представления A (FileListViewController) и B (TextFileViewController). A является UITableViewController. Что я делаю сейчас, так это то, что после выбора строки в контроллере A я загружаю текстовый файл и отображаю этот текст в UITextView в контроллере B.

Ниже приведены заголовок и часть реализации (часть кода сокращена) моих двух контроллеров.

Интерфейс 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: будет вызван после завершения loadFile: intoPath: в методе disSelectRowAtIndexPath.

В методе updateText TextFileViewController из NSLog я вижу, что свойство text обновлено правильно. Но экран не обновляется соответственно. Я пробовал setNeedsDisplay, но тщетно. Я что-то пропустил?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 16 июня 2011

In - [TextFileViewController viewDidLoad] вы создаете UITextView, но его кадр никогда не устанавливается, и он не добавляется в иерархию представлений.

Попробуйте изменить это:

textFileView = [[UITextView alloc] init];

к этому:

textFileView = [[UITextView alloc] initWithFrame:[[self view] bounds]];
[[self view] addSubview:textFileView];
0 голосов
/ 16 июня 2011

Проблема в том, что textFileView создается в методе viewDidLoad из TextFileViewController.Этот метод еще не был вызван к тому времени, когда вы вызываете updateText (это происходит до нажатия TextFileViewController).

Это можно исправить, принудительно загрузив представление перед вызовом [[self restClient] loadFile:metaData.path intoPath:filePath];.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...