【问题标题】:How to initiate a view controller from another view controller?如何从另一个视图控制器启动视图控制器?
【发布时间】:2014-12-10 19:12:45
【问题描述】:

我有一个名为 StackViewController 的表视图控制器,这是我保存在 CreateViewController 中创建的待办事项列表的地方... 我在 StackViewController 中有一个名为 currentTarget 的 NSString 属性,它代表堆栈中的第一个要执行的操作:

import <UIKit/UIKit.h>

@interface StackTableViewController : UITableViewController

@property (nonatomic, strong) NSString *currentTarget;

@end

这个属性保存了表格视图中的第一个 NSString 对象,我是这样理解的:

#import "StackTableViewController.h"
#import "Target.h"
#import "CoreDataStack.h"

@interface StackTableViewController () <NSFetchedResultsControllerDelegate>

@property (nonatomic, strong) NSFetchedResultsController *fetchedResultController;

@end

@implementation StackTableViewController

- (void)viewDidLoad {

    [super viewDidLoad];
    [self.fetchedResultController performFetch:nil];
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0];
    Target *target = [self.fetchedResultController objectAtIndexPath:indexPath];
    self.currentTarget = target.body;
}

现在,当我登录到名为 HomeViewController 的主页时,我想启动 StackTableViewController 并获取其 currentTatget 属性值... 我知道有委托可以帮助您在发生更改时通知其他视图,但在我的情况下,我什至想在进入此页面(StackTableViewController)之前获取此属性值,因为 HomeViewController 是第一个视图控制器已加载(我的初始视图控制器),当我刚刚登录到应用程序并使用它填充标签时,我访问此属性的内容。

我应该怎么做?

我想可能是这样的:

#import "HomeViewController.h"
#import "CreateViewController.h"
#import "StackTableViewController.h"

@interface HomeViewController ()

@property (strong, nonatomic) IBOutlet UILabel *targetLabel;

@end

@implementation HomeViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    StackTableViewController *vc = [[StackTableViewController alloc] init];
    NSString *current = vc.currentTarget;
    self.targetLabel.text = current;
}

但我在这里遗漏了一些东西......我的标签没有填充...... 我认为视图生命周期有些问题。

我是新手,请帮我解决这个问题...谢谢

【问题讨论】:

  • 我看到了关于在视图控制器之间传递数据的问题,但在那里找不到有助于这个特定场景的东西。

标签: ios objective-c iphone


【解决方案1】:

不要对 viewDidLoad 中的图形做任何事情。您最早想要在 viewWillAppear 中执行此操作(大部分时间),偶尔您需要在 viewDidAppear 中执行此操作。 在 viewWillAppear 中尝试相同的代码,它应该可以工作。

哦,对了,因为你的另一个 viewController 是在 viewDidLoad 中设置的,你需要调用 分配初始化后,您的 stackTableViewController 上的 [stackTableViewController 视图]。看起来很奇怪,但这确实有效。这是因为 StackTableViewController 在初始化时没有完成计算,它在 viewDidLoad 委托中运行。

- (void)viewDidLoad {
    [super viewDidLoad];
    StackTableViewController *vc = [[StackTableViewController alloc] init];
    [vc view];
    NSString *current = vc.currentTarget;
    self.targetLabel.text = current;
}

【讨论】:

  • 我刚刚做了,但没有帮助:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
相关资源
最近更新 更多