2014-01-14 57 views
1

我想要我的viewcontrollerPersonalListViewController)加載UITableView。頁面底部有一個addPersonalItem按鈕。當用戶按下按鈕時,它從Nib文件加載UIViewAddItemView)。從尼布加載子視圖文本字段訪問文本

AddItemView上有兩個UITextFields。 1)如何從PersonalListViewController訪問在字段中輸入的文本,以及2)PersonalListViewController如何知道用戶何時從屏幕上刪除AddItemView(即在AddItemView上輸入的文本並按下完成)?

在PersonalListViewController.m

- (IBAction)addPersonalItem:(id)sender { 

     NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"AddItemView" owner:self options:nil]; 
     UIView *mainView = [subviewArray objectAtIndex:0]; 
     [self.view addSubview:mainView]; 
} 

在AddItemView.h

#import <UIKit/UIKit.h> 

@interface AddItemView : UIView { 
    IBOutlet UITextField *itemNameTextField; 
    IBOutlet UITextField *quantityTextField; 
} 

@property (strong, nonatomic) IBOutlet UITextField *itemNameTextField; 
@property (strong, nonatomic) IBOutlet UITextField *quantityTextField; 

@end 

在AddItemView.m

#import "AddItemView.h" 

@implementation AddItemView 

@synthesize itemNameTextField; 
@synthesize quantityTextField; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

回答

2

試試這個, 定義在AddItemView塊由

typedef void (^completionBlock)(NSString *itemName, NSString *quantity); 

添加此塊

@property (nonatomic, strong) completionBlock completionCallback; 

這樣的屬性,在 AddItemView.h

#import <UIKit/UIKit.h> 

typedef void (^completionBlock)(NSString *itemName, NSString *quantity); 

@interface AddItemView : UIView { 
    IBOutlet UITextField *itemNameTextField; 
    IBOutlet UITextField *quantityTextField; 
} 

@property (strong, nonatomic) IBOutlet UITextField *itemNameTextField; 
@property (strong, nonatomic) IBOutlet UITextField *quantityTextField; 
@property (nonatomic, strong) completionBlock completionCallback; 

- (IBAction)completionButtonAction:(id)sender; 

@end 

AddItemView和它的行動實現諸如

- (IBAction)completionButtonAction:(id)sender { 
    if (self.completionCallback != nil) { 
     NSString *itemName = self.itemNameTextField.text; 
     NSString *quantity = self. quantityTextField.text; 
     self.completionCallback (itemName, quantity); 
    } 
} 

在PersonalListViewController塊添加UIButton。m

- (IBAction)addPersonalItem:(id)sender { 

    NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"AddItemView" owner:self options:nil]; 
    AddItemView *mainView = (AddItemView *)[subviewArray objectAtIndex:0]; 
    void (^completionBlock)(NSString *itemName, NSString *quantity) = ^(NSString *itemName, NSString *quantity){ 
     [self personalItemAddedWithItemName:itemName quantity:quantity]; 
    }; 
    mainView.completionCallback = completionBlock 
    [self.view addSubview:mainView]; 
} 


- (void)personalItemAddedWithItemName:(NSString *)itemName quantity:(NSString *)quantity { 
    //add your code here 
} 
+0

我試圖實現這一點,但它永遠不會在'completionButtonAction:(id)sender.'中的if語句中獲得。如果我刪除if語句if(self.completionCallback!= nil)',則出現EXC_BAD_ACCESS錯誤 –

+0

哦..對不起..我忘了添加'mainView。 completionCallback = completionBlock'。請參閱最新的答案。 – Akhilrajtr

+0

完美的作品。謝謝 –

0

我爲了獲得UITextField的文本,使用它的.text屬性(例如, myTextField.text)。我會建議添加一個UIButton到AddItemView,並添加一個目標動作到按鈕。在按鈕調用的方法中,您應該使用文本字段的文本。之後,你可以做所有的添加等。

PS我也推薦使用除addSubview之外的方法。也許用動畫推動它會更好。

0

首先要從uitextfield中獲取文本,您可以爲子視圖中的每個文本字段設置標記,並使用相同的標記獲取文本字段實例。或者,您可以將兩個文本字段的委託分配給PersonalListViewController並獲取輸入的文本。

要知道AddItemView是否被刪除。如果你隱藏並顯示AddItemView按下底部按鈕,那麼你可以檢查[<mainView> isHidden]屬性的視圖,並做你的邏輯。或者,如果您從PersonalListViewController中刪除AddItemView,那麼您可以擁有全局實例AddItemView並檢查並執行您的邏輯。如果實例在那裏,那麼視圖就在那裏。

+0

他有指向文本字段的出口,所以在這種情況下標籤不會影響他。 – erdekhayser