2011-10-24 71 views
4

我有一個方法「的someMethod」在OneViewController.h宣佈從另一個視圖控制器調用一個視圖控制器的方法

@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]; 

} 

我想調用someMethod當出現在不同的viewController時 - secondViewController

(類似於[OneViewController someMethod]),So當我回到OneViewController時,我可以看到someMethod所做的更改。

我需要使用appDelegate方法嗎?

我試過以下,但它不起作用。

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

感謝提前任何幫助..這樣做的

+0

你是從oneviewcontroller轉向secondviewcontroller嗎?並想從secondviewcontroller右側訪問oneviewcontroller方法? – SriPriya

+0

是的。我正在從OneviewController移動到SecondViewController。並想從SecondViewController訪問OneViewController方法。 – alekhine

回答

4

在SecondViewController中,聲明OneViewController類的引用。您可以分配財產。在移動到SecondViewController之前設置參考。現在通過參考,您可以調用實例方法[_oneView someMethod]

編輯:

聲明

OneViewController *_oneView; 

還要添加指派屬性,

@property(nonatomic,assign) OneViewController *_oneView; 

合成下.m文件中的變量。

從OneViewController顯示SecondViewController時,只需添加以下行即可。

secondView._oneView = self; 
+0

感謝您的迴應Lanc。但是我如何在SecondViewController中創建OneViewController的引用? – alekhine

+0

我已根據需要更新了我的代碼。 – Ilanchezhian

+0

非常感謝Lanc。它工作完美(我不知道爲什麼).... !!!我需要詳細研究傳遞引用和委託方法。 – alekhine

-1

一種方法是改變聲明+(void) someMethod ;在OneViewController.h並在實現文件相應地改變負到正。這將使其成爲類方法而不是實例方法。然後在您的SecondViewController.m文件中,確保在執行聲明之前放置@class OneViewController;;那麼你可以調用[OneViewController someMethod],它應該執行。乾杯!

+0

在編譯時,將符號從 - 改爲+會導致錯誤,表示在類方法中訪問的實例變量。 – alekhine

1

理想情況下,你應該創建一個協議,委託方法來完成你在找什麼。

創建一個協議,在secondViewController實現它和協議委託設置爲firstViewController,然後使用委託方法來調用在secondViewController

我希望它爲你工作的相關方法.. !!

3

有時會調用方法directlry創建[classObject methodName]不會重申視圖中的更改。如果您想將UIScrollView屬性從scrollEnble = NO;更改爲scrollEnable = YES;,則不會重申。 你應該使用UIApplication的單身人士。

假設你要調用ViewController1' S分析- (void)myMethodViewController2那麼這裏的步驟:

  • 在你的appdelegate導入ViewController1,創造它的對象*vc。德拉爾屬性@property (strong, nonatomic) ViewController1 *vc;synthesize也。
  • 現在來到Viewcontroller1班。進口AppDelegate.hViewcontroller1的和viewDidLoad這樣寫:

    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

相關問題