我想让viewcontroller
(PersonalListViewController
)加载UITableView
。页面底部有一个addPersonalItem
按钮。当用户按下按钮时,它会从Nib文件加载UIView
(AddItemView
)。
在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
答案 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并检查并执行逻辑操作。如果有实例,那么视图就在那里。