Обновление UITextView - PullRequest
0 голосов
/ 17 июля 2009

У меня есть два класса UIViewcontroller с именами First и second ... Когда я нажал кнопку firstview, я передал одну строку во secondview и отобразил эту строку во secondview uitextview ... Но когда я перехожу во secondview, в textview нет текста ...

Я отправил код ....

Что мне здесь не хватает

//first.h
#import <UIKit/UIKit.h>


@interface FirstViewController : UIViewController {
    IBOutlet UIButton *btnView;
}

@property(nonatomic,retain) UIButton *btnView;

-(IBAction)UpdateSecondView:(id)sender;


@end

//first.m
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "testtabbarAppDelegate.h"


@implementation FirstViewController
@synthesize btnView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Initialization code
    }
    return self;
}

/*
 Implement loadView if you want to create a view hierarchy programmatically
- (void)loadView {
}
 */


- (void)viewDidLoad {

}

-(IBAction)UpdateSecondView:(id)sender
{
    SecondViewController *object=[[SecondViewController alloc]initWithNibName:@"SecondView" bundle:nil];
    [object UpdateText:@"Testing"];
    [object release];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}


- (void)dealloc {
    [btnView release];
    [super dealloc];
}


@end

//second.h
#import <UIKit/UIKit.h>


@interface SecondViewController : UIViewController {
    IBOutlet UITextView *textView;
    NSString *globalString;
}
@property(nonatomic,copy) NSString *globalString;
@property(nonatomic,retain)  UITextView *textView;

-(void)UpdateText:(NSString *)string;

@end
//second.m
//
//  SecondViewController.m
//  testtabbar
//
//  Created by mac user on 6/9/09.
//  Copyright 2009 __MyCompanyName__. All rights reserved.
//

#import "SecondViewController.h"


@implementation SecondViewController
@synthesize textView;
@synthesize globalString;


//NSString *globalString=@"";

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Initialization code

    }
    return self;
}

/*
 Implement loadView if you want to create a view hierarchy programmatically
- (void)loadView {
}
 */

- (void)viewDidLoad 
{   

}

-(void)UpdateText:(NSString *)string
{
    textView.text=string;
}

- (void)viewWillAppear:(BOOL)animated
{
}

- (BOOL)textViewShouldReturn:(UITextView *)theTextView {
    // When the user presses return, take focus away from the text field so that the keyboard is dismissed.
    if (theTextView == textView) {
        [textView resignFirstResponder];
    }
    return YES;
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}


- (void)dealloc {
    [globalString release];
    [textView release];
    [super dealloc];
}


@end

Кто-нибудь может мне помочь?

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

1 Ответ

1 голос
/ 17 июля 2009

Я собираюсь сделать предположение, что оба они реализованы как перья и находятся в UITabBarController.

Я думаю, вы путаете понятие класса и экземпляра. Класс - это (грубо говоря) описание некоторого кода и состояния. Вы можете использовать это описание для создания экземпляра этого класса (который называется экземпляром). Каждый экземпляр этого класса является уникальным и отдельным, если вы изменяете один экземпляр, он не влияет на другие.

Хорошо, так почему я вхожу в это? Ну, FirstViewController и SecondViewController являются классами, а не экземплярами. Имеющиеся у вас nib-файлы описывают конфигурацию конкретного экземпляра этих контроллеров, и когда он загружается, он создает экземпляр контроллера с этими настройками. То, что вы делаете в UpdateSecondView, - это создание ДРУГОГО SecondViewController, установка значения в нем и немедленное его удаление. Что вам нужно сделать, так это установить значение в экземпляре SecondViewController, который создается при загрузке пера.

На самом деле, не видя ваших перьев и того, как все устроено, я не могу дать вам точное объяснение того, что вам нужно делать, но суть в том, что вы хотите создать переменную экземпляра в FirstViewController и подключить ее в соответствующий экземпляр SecondViewController, чем использовать его для изменения этого экземпляра SecondViewController следующим образом:

//Updated @interface
@interface FirstViewController : UIViewController {
    IBOutlet UIButton *btnView;
    IBOutlet SecondViewController *secondViewController;
}

@property (nonatomic, retain) SecondViewController *secondViewController;
@end

//Updated @implementation
-(IBAction)UpdateSecondView:(id)sender
{
    [self.secondViewController UpdateText:@"Testing"];
}

Теперь, если вы просто запустите вышеуказанные изменения, он не будет работать (потому что secondViewController не будет установлен), поэтому, как я уже говорил, вам понадобится какой-то фрагмент кода, который знает оба экземпляра, перехватывает его вверх. Потенциально вы можете сделать это в наконечнике для UITabBarController, в котором размещены оба элемента, перетащив туда ссылку на новый IBOulet, или вы можете сделать это программно в другом месте.

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