【问题标题】:Calling a method of One View controller from Another View Controller从另一个视图控制器调用一个视图控制器的方法
【发布时间】:2011-10-24 09:52:09
【问题描述】:

我在 OneViewController.h 中声明了一个方法“someMethod”

@interface OneViewController
{
UIView *tempView;
..

}
-(void) someMethod ;
@end

并在 OneViewController.m 文件中实现

@implementation OneViewController

-(void) someMethod 
{
tempView = [[UIView alloc]initWithFrame:CGRectMake(100, 50, 200, 250)];
tempView.backgroundColor = [UIColor yellowColor];
if([[self.view subviews] containsObject:tempView])
[tempView removeFromSuperView];
   else
   [self.view addsubview:tempView];

}

当出现在不同的 viewController - secondViewController 时,我想调用 someMethod

(类似于[OneViewController someMethod]),这样当我回到OneViewController 时,我可以看到someMethod 所做的更改。

我需要使用 appDelegate 方法吗?

我已经尝试过,但它不起作用。

neViewController *newViewController = [[OneViewController alloc] init];
[newViewController someMethod];

提前感谢您的帮助..

【问题讨论】:

  • 您要从 oneviewcontroller 转移到 secondviewcontroller 吗?并想从 secondviewcontroller 访问 oneviewcontroller 方法吗?
  • 是的。我正在从 OneviewController 移动到 SecondViewController。并希望从 SecondViewController 访问 OneViewController 方法。

标签: iphone methods uiviewcontroller


【解决方案1】:

在 SecondViewController 中,声明 OneViewController 类的引用。您可以拥有分配财产。在移动到 SecondViewController 之前设置参考。现在有了引用,就可以调用实例方法[_oneView someMethod]了。

编辑:

声明

OneViewController *_oneView;

同时添加assign属性,

@property(nonatomic,assign) OneViewController *_oneView;

合成.m文件中的变量。

从 OneViewController 显示 SecondViewController 时,只需添加以下行。

secondView._oneView = self;

【讨论】:

  • 感谢您的回复 Lanc。但是如何在 SecondViewController 中为 OneViewController 创建引用?
  • 非常感谢 Lanc。它工作得很好(我不知道为什么)....!!!我需要详细研究传递引用和委托方法。
【解决方案2】:

有时调用直接创建[classObject methodName] 的方法不会反映视图中的更改。就像如果你想将UIScrollView 属性从scrollEnble = NO; 更改为scrollEnable = YES;,它不会反映。 您应该使用 UIApplication 的单例。

假设你想在ViewController2中调用ViewController1's方法- (void)myMethod那么这里是步骤:

  • 在您的 AppDelegate 中导入 ViewController1 并创建其对象 *vc。德莱尔物业@property (strong, nonatomic) ViewController1 *vc;。 synthesize 也。
  • 现在来到Viewcontroller1 课堂。在你的Viewcontroller1 和viewDidLoad 中导入AppDelegate.h,这样写:

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    appDelegate.vc1 = self;

  • 转到您的ViewController2.h 并导入AppDelegate.h
  • 到你想调用ViewController2的方法的那一行写成这样:

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    [[appDelegate vc1] myMethod]; // to allow scrolling

【讨论】:

    【解决方案3】:

    理想情况下,您应该创建一个协议和委托方法来完成您正在寻找的内容。

    创建一个协议,在 secondViewController 中实现,并将协议委托设置为 firstViewController,然后使用委托方法调用 secondViewController 中的相关方法

    我希望它对你有用..!!

    【讨论】:

      【解决方案4】:

      一种方法是在您的 OneViewController.h 中将声明更改为+(void) someMethod ;,并在实现文件中相应地将减号更改为加号。这将使它成为类方法而不是实例方法。然后在您的 SecondViewController.m 文件中,确保将 @class OneViewController; 放在实现声明之前;然后你可以调用 [OneViewController someMethod] 它应该执行。干杯!

      【讨论】:

      • 将符号从 - 更改为 + 会在编译时出错,说明在类方法中访问的实例变量。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 2011-12-11
      • 2014-04-24
      • 2011-05-18
      相关资源
      最近更新 更多