使用来自另一个viewcontroller的视图控制器的变量的值

时间:2011-10-14 15:50:41

标签: iphone objective-c xcode viewcontroller

我想使用点击UITableCellView后收到的值。我将值存储到数组中,并定义了UITableCellView的ViewController实例,以便访问这些数组。即使我可以从另一个ViewController到达数组,它总是将“0”写入我希望拥有数据的文本字段。我需要存储在数组中的确切数据。以下是我尝试这样做的代码;

(fourthViewController)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSString *msg = [[NSString alloc] initWithFormat:
                 @"%@ rate for %@ has been selected",
                 [rates objectAtIndex:[indexPath row]],
                 [countries objectAtIndex:[indexPath row]]];
UIAlertView *alert = 
[[UIAlertView alloc] initWithTitle:@"New country selected"
                           message:msg 
                          delegate:self 
                 cancelButtonTitle:@"OK" 
                 otherButtonTitles:nil];    

[alert show];     
[alert release];
[msg release]; 

fCountry = [countries objectAtIndex:indexPath.row];
fRate = [rates objectAtIndex:indexPath.row];
}

FirstViewController我正在尝试使用数组;

@interface FirstViewController : UIViewController{
@public

...

FourthViewController *fourthViewController;
}

...

@property (nonatomic, assign) FourthViewController *fourthViewController;

@synthesize fourthViewController;

提前感谢您的回答!

3 个答案:

答案 0 :(得分:1)

让我澄清一下我做了什么以及我想做什么。

这是我在FourthViewController下创建的UItableView和UITableViewCell;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *countryIdentifier = @"countryIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:countryIdentifier];   

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"countryIdentifier"];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    NSString *cellValue = [NSString stringWithFormat:@"%@, %@", [countries objectAtIndex:indexPath.row], [rates objectAtIndex:indexPath.row]];
    cell.textLabel.text = cellValue;
    cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:16];
    cell.selectionStyle = UITableViewCellSelectionStyleGray;

    return cell;
}

以下是在FourthViewController中点击其中一个单元格后发生的事情;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NSString *msg = [[NSString alloc] initWithFormat:
                     @"%@ rate for %@ has been selected",
                     [rates objectAtIndex:[indexPath row]],
                     [countries objectAtIndex:[indexPath row]]];
    UIAlertView *alert = 
    [[UIAlertView alloc] initWithTitle:@"New country selected"
                               message:msg 
                              delegate:self 
                     cancelButtonTitle:@"OK" 
                     otherButtonTitles:nil];    

    [alert show];     
    [alert release];
    [msg release]; 

    fCountry = [countries objectAtIndex:indexPath.row];
    fRate = [rates objectAtIndex:indexPath.row];
}

fCountry和fRate是我将窃听的单元格数据存储在其中的字符串。它们合成得当。我想在另一个名为FirstViewController的ViewController中的文本字段中使用存储在这两个字符串中的单元格信息。

以下是我尝试在FirstViewController中使用FourthViewController的字符串;

#import "FourthViewController.h"

@interface FirstViewController : UIViewController{

    ...

    IBOutlet UITextField *taxRateField;
    FourthViewController *fourthViewController;
}

...

@property (nonatomic, retain) IBOutlet UITextField *taxRateField;
@property (nonatomic, assign) FourthViewController *fourthViewController;
 ...

@end

在FourthViewController.m中;

#import "FirstViewController.h"
#import "FourthViewController.h"

@implementation FirstViewController

...

@synthesize taxRateField;
@synthesize fourthViewController;

- (void)viewWillAppear:(BOOL)animated {
    ...
    taxRateField.text = fourthViewController.fRate;
}

我实现了所有必要的数据,并正确地建立了IBOutlets的连接,但我确信我错过了一些非常小的东西。

再次感谢你!

答案 1 :(得分:0)

为了给您一个明确的答案,我需要更多有关您的设计的信息。让我根据你的代码尝试猜测问题是什么 - “fCountry”和“fRate”是您尝试访问的属性吗?如果是这样,它们是否正确设置和合成? 你提到你正试图从UITextField获取数据 - 这是UITableViewCell的一个元素吗?如果是这样,请确保它已正确连接到IBOutlet,尽管此设计中的某些内容对我来说似乎不对。我建议插入你需要的任何数据,因为它进入NSMutableArray并从那里获取它而不是试图从单元格本身获取它(不适当的MVC)。这可以通过委派给您的“FourthViewController”轻松完成。希望这会给你一个方向。祝你好运!

答案 2 :(得分:0)

您将整个ViewController声明为属性。只需将您的数组用作属性。

通常,传递数据有很大的好处:http://www.theappcodeblog.com/2011/04/15/passing-data-between-views-tutorial-using-a-protocol-delegate-in-your-iphone-app/