2011-12-05 4 views
0

Я делаю приложение, где мне нужно передать значение от second class до first class. Я создал метод делегата для этого в second class.Как передать значение от одного UIViewController к другому

В second class У меня есть UITextField, и если ввести любой текст в этом текстовом поле должно быть передано в cell в UITableView в first view.

Однако в моем случае это значение не передается должным образом. Что я сделал не так?

Это мой код:

second.h

#import <UIKit/UIKit.h> 
@protocol secondDelegate<NSObject> 
@required 
- (void)setsecond:(NSString *)inputString; 
@end 

@interface second : UIViewController { 
    IBOutlet UITextField *secondtextfield; 
    id<secondDelegate>stringdelegate; 
    NSString *favoriteColorString; 
} 
@property (nonatomic, retain) UITextField *secondtextfield; 
@property (nonatomic, assign) id<secondDelegate>stringdelegate; 
@property (nonatomic, copy) NSString *favoriteColorString; 
@end 

second.m

#import "second.h" 

@implementation second 
@synthesize stringdelegate, secondtextfield, favoriteColorString; 

- (void)viewWillDisappear:(BOOL)animated { 
    [[self stringdelegate] setsecond:secondtextfield.text]; 
    favoriteColorString=secondtextfield.text; 
    NSLog(@"thuis check:%@", favoriteColorString); 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    [theTextField resignFirstResponder]; 
    return YES; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    //[[self stringdelegate] setsecond:secondtextfield.text]; 
    //favoriteColorString = secondtextfield.text; 
    //NSLog(@"thuis check:%@", favoriteColorString); 
} 
@end  

first.h

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

@interface first : UITableViewController<secondDelegate> { 
    //TextviewExampleAppDelegate *app; 
    TextviewExampleAppDelegate *check; 
} 

first.m

@implementation first 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell... 
    cell.textLabel.text = @"message"; 
    cell.detailTextLabel.text = check.favoriteColorString; 
    NSLog(@"this second check:%@", check.favoriteColorString); 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    second *viewtwo = [[second alloc] initWithNibName:@"second" bundle:nil]; 
    //viewtwo.favoriteColorString = indexPath; 
    viewtwo.stringdelegate = self; 
    [self.navigationController pushViewController:viewtwo animated:YES]; 
    [viewtwo release]; 
} 

- (void)setsecond:(NSString *)inputString { 
    if (nil != self.stringdelegate) { 
     [self.stringdelegate setsecond:inputString]; 
    } 
    [self.tableView reloadData]; 
} 
@end 
+0

почему у создали объект для TextviewExampleAppDelegate * проверка; создайте объект для второго класса, в котором вы создаете объект. –

+0

@coolanikothari может помочь мне, что я должен сделать, попробуйте как par ur, но я не какое-либо решение, пожалуйста, помогите мне – Rocky

ответ

4
  1. методы удалить делегат.
  2. импортируйте свой второй класс в первый.
  3. во втором классе импортировать первый класс и реализовать id firstClass переменная там.
  4. при нажатии 2 класс, комплект id из (3) to self.
  5. когда you'v сделано и готово передать его, установить firstClass.passedValue = passingValue
  6. поп второго класса

, например:

//first.h: 
#import "second.h" 
@class second 

//second.h: 
#import "first.h" 
@class first 
... 
id firstClass; 

//first.m: 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    second *viewtwo =[[second alloc]initWithNibName:@"second" bundle:nil]; 
    [self.navigationController pushViewController:viewtwo animated:YES]; 
    viewtwo.firstClass = self; 
    [viewtwo release]; 
} 

//second.m: 
firstClass.passedValue = self.passingValue; 
+0

может у вас привести пример на него, но моя проблема еще не решена, пожалуйста, помогите мне на этом – Rocky

+0

Look , Я отредактировал ответ – SentineL

+0

sentinel i done as par ur ans уже сделал, который у вас дает, но он не работает, мои данные не переходят от второго к первому классу – Rocky

3

Пожалуйста, обратитесь следующие шероховатой нуля:

в делегат приложения .h

Создать переменную

NSString *varStr; 

Присвоить недвижимости

@propery (nonatomic, retain) NSString *valStr; 

В делегатом.м

@synthesize varStr; 

инициализации вар

varStr = [NSString strinWithFormat:@"Hi"]; 

в первом классе

создания делегата вар;

delegate class *var = (delegate class*)[[UIApplication sharedApplication] delegate]; 

установленное значение

var.varStr = [NSString strinWithFormat:@"First"]; 

значение приобретают

NSLog (@"%@",var.varStr); 

во втором классе

создать делегат var;

delegate class *var = (delegate class*)[[UIApplication sharedApplication] delegate]; 

установленное значение

var.varStr = [NSString strinWithFormat:@"Second"]; 

значение приобретают

NSLog (@"%@",var.varStr); 
+0

'класс делегата var = (класс делегата) [[UIApplication sharedApplication] делегат]; 'не работает человек !!! ... что я могу сделать? Я хотел попробовать свой метод в своем приложении. – Emon

+1

Можете ли вы показать мне код ur? –

+0

На самом деле я ничего не сделал .... Я просто хочу знать, как я могу передать несколько строковых данных с одного контроллера на другой. Я использовал ваш метод, но когда я использую класс делегирования var = (класс делегата) [[UIApplication sharedApplication ] delegate]; 'тогда он отображает делегата undefined.May быть я спросил вас глупый вопрос, но на самом деле я никогда не использовал' sharedApplication'. Так помогите мне пожалуйста – Emon

Смежные вопросы