从Nib加载的子视图中的文本字段访问文本

时间:2014-01-14 02:04:56

标签: ios objective-c

我想让viewcontrollerPersonalListViewController)加载UITableView。页面底部有一个addPersonalItem按钮。当用户按下按钮时,它会从Nib文件加载UIViewAddItemView)。

AddItemView上有两个UITextFields。 1)如何从PersonalListViewController和2中访问字段中输入的文本?PersonalListViewController如何知道用户何时从屏幕上删除AddItemView(即在{上输入的文字) {1}}并按下完成)?

在PersonalListViewController.m

AddItemView

在AddItemView.h中

- (IBAction)addPersonalItem:(id)sender {

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

在AddItemView.m

#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

3 个答案:

答案 0 :(得分:3)

试试这个, 通过

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

UIButton中添加AddItemView,并在其中执行一个块

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

在PersonalListViewController.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
}

答案 1 :(得分:1)

要获取UITextField的文本,请使用其.text属性(例如myTextField.text)。我建议将UIButton添加到AddItemView,并向该按钮添加目标操作。在按钮调用的方法中,您应该使用文本字段的文本。之后,您可以进行所有添加等。

PS我还建议使用除addSubview之外的方法。也许用动画推动它会更好。

答案 2 :(得分:1)

首先从uitextfield获取文本,您可以为子视图中的每个文本字段设置标记,并使用相同的标记获取文本字段实例。或者您可以将textfield的委托分配给PersonalListViewController并获取输入的文本。

了解是否删除了AddItemView。如果按下底部按钮隐藏并显示AddItemView,则可以检查视图的[<mainView> isHidden]属性并执行逻辑操作。或者,如果从PersonalListViewController中删除AddItemView,则可以使用全局实例AddItemView并检查并执行逻辑操作。如果有实例,那么视图就在那里。