簡體   English   中英

在視圖之間傳遞數據?

[英]Passing data from view to view?

我僅出於學習更加客觀的目的而提出申請。 該應用程序基本上將用戶帶到模式視圖,然后為用戶提供要單擊的選項(uibutton)。 當用戶點擊一個按鈕時,模式視圖將關閉,我想從該按鈕中獲取數據(無論是按鈕,標簽等的標題,以最容易使用的為准),並將其作為變量存儲在我的主要觀點。 我嘗試使用在單獨的.h文件中定義的extern NSString,但是沒有運氣。 我想念什么?

使用委托。 制定協議。

@protocol SelectValueDelegate <NSObject>
@optional
- (void) selectedValue:(NSString * )values selectionViewController:(UIViewController *)controller;
- (void)selectionCanceled:(UIViewController *)controller;
@end

在您的MainViewController.h實現它

@interface MainViewController : UIViewController<SelectValueDelegate> {
    //.... 
}

.m文件如下所示:

- (void) selectedValue:(NSString * )values selectionViewController:(UIViewController *)controller
{
    //here you have value.
    [controller dissmissModalViewControllerAnimated:YES];
}
- (void)selectionCanceled:(UIViewController *)controller
{
        [controller dissmissModalViewControllerAnimated:YES];
}

然后在您的ModalViewController創建一個委托的屬性,如下所示:

@interface ModalViewController : UIViewController
        id<SelectValueDelegate> delegate;
}
@property(assign)id delegate; // synthesize it also

現在單擊按鈕,執行以下操作:

-(IBAction)buttonClicked:(id)sender
{
       [delegate selectedValue:@"Value" selectionViewController:self];
}

並將其模態呈現在MainViewController ,請執行以下操作:

ModalViewController *screen = [[ModalViewController alloc] initWithBlahblah];
screen.delegate = self;
[self.navigationController presentModalViewControllerAnimated:YES];

您必須通過iOS中的委托模式。

您可以使用委托方法將值傳遞回主視圖。

Apple關於協議的文檔

使用協議的例子

您必須使用委托方法來傳遞值,請參閱Apple文檔

您可以將數據存儲在appDelegate中的對象中,該對象是應用程序的Delegate文件,

您可以在appDelegate中聲明一個對象:

NSString *buttonName;

然后對對象進行屬性化和綜合化。

完成此操作后,在要作為模態視圖打開的視圖控制器中放入一個代碼:

appDelegate.buttonName = yourbutton.titleLabel.text;

現在,即使關閉了模態視圖,您也將按鈕的標題存儲在appldelegate的對象中,並且可以從應用程序中的任何位置訪問它。

假設您有兩個視圖控制器說AB

你的啊

{
  NSString *strData;
  int cId;
}

@property (nonatomic, retain) NSString *strData;
@property (readwrite) int cId;

現在在你的我

@synthesize strData,cId;

你的Bh

@class A

{
   A *aObj;
}

現在在您的Bm中

#import "A.h"

- (void) viewDidLoad
{
  aObj=[A alloc] init]; //alloc object of A
  [aObj setCId:10]; //set value for cId
  [aObj setStrData:@"Hello from B"]; //set value for strData
  //do what ever
  [aObj release]; //don't forget
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM