2014-09-10 78 views
2

我试着去定制inputView添加到tableViewCell输入字段,但是当我这样做,我得到了我的应用程序和应用程序崩溃混合视图。我看过以前的解决方案,但没有找到适合我的工作。你能帮助我吗?的iOS UITextField.inputView错误

#pragma mark - TableView data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    return 1; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return self.taskQuestionObjects.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Do dequeue the custom cell here 
    TaskManagerQuestionAndAnswerTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:taskQuestionAnswerCellIdentifier]; 

    TaskManagerQuestion *questionObject = self.taskQuestionObjects[indexPath.row]; 

    cell.taskQuestionLabel.text = questionObject.title; 

    cell.taskAnswerTextField.inputView = [[[NSBundle mainBundle] loadNibNamed:@"TaskManagerPickerKeyboardViewController" owner:self options:nil] objectAtIndex:0]; 

    return cell; 
} 

控制台日志:

2014-09-12 12:26:19.615 TaskManager[24317:60b] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x167906e0 V:[UITableView:0x16bc6c00(417)]>", 
    "<NSLayoutConstraint:0x167932d0 V:[_UILayoutGuide:0x16792e00]-(0)-[UITableView:0x16bc6c00]>", 
    "<NSLayoutConstraint:0x16793360 V:[UITableView:0x16bc6c00]-(87)-[_UILayoutGuide:0x16792ff0]>", 
    "<_UILayoutSupportConstraint:0x167917d0 V:[_UILayoutGuide:0x16792e00(64)]>", 
    "<_UILayoutSupportConstraint:0x16791770 V:|-(0)-[_UILayoutGuide:0x16792e00] (Names: '|':UIView:0x16791280)>", 
    "<_UILayoutSupportConstraint:0x16791890 V:[_UILayoutGuide:0x16792ff0(0)]>", 
    "<_UILayoutSupportConstraint:0x16791830 _UILayoutGuide:0x16792ff0.bottom == UIView:0x16791280.bottom>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1677d2f0 h=--& v=--& V:[UIView:0x16791280(480)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x167906e0 V:[UITableView:0x16bc6c00(417)]> 

Break on objc_exception_throw to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
2014-09-12 12:26:38.039 TaskManager[24317:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't add self as subview' 
*** First throw call stack: 
(0x30228f83 0x3aaa3ccf 0x30228ec5 0x32a51535 0x32a514bf 0x32c19f71 0x32a57ac5 0x32c19879 0x32bd6b27 0x32af3d63 0x32af3b6d 0x32af3b05 0x32a45d59 0x326c362b 0x326bee3b 0x326beccd 0x326be6df 0x326be4ef 0x32a493e1 0x301f420b 0x301f36db 0x301f1ecf 0x3015cebf 0x3015cca3 0x350b6663 0x32aa914d 0xe85c1 0x3afb0ab7) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 
+1

你可以发布崩溃的控制台日志? – 2014-09-10 20:28:01

+0

编辑后的崩溃日志。 – 2014-09-10 20:35:20

回答

0

的inputView属性被定义为(UIView的*),而不是(的UIViewController *)。将它分配给inputView时,您需要使用已加载的视图控制器的视图属性,而不是视图控制器本身。 我想你还应该将加载的视图控制器作为一个属性存储,每次从一个笔尖加载它时,单元格重新加载对应用程序性能不利。尽管我最后一次在表格视图中尝试loadNibNamed是在iOS 4.0中,但它似乎没有使用任何缓存。如何尝试这样的事情:

// class extension for the lazy loaded property 
@interface MyTableViewController() 
@property (readonly) UIViewController *inputVC; 
@end 


@implementation MyTableViewController { 
    UIViewController *_inputVC; 
} 

- (UIViewController *)inputVC { 
    if (_inputVC == nil) { 
     _inputVC = [[[NSBundle mainBundle] loadNibNamed:@"TaskManagerPickerKeyboardViewController" owner:nil options:nil] objectAtIndex:0]; 
    } 
    return inputVC; 
} 

... 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 
    cell.taskAnswerTextField.inputView = self.inputVC.view; 
    ... 
} 

@end 
+0

谢谢!你的答案正是我需要的!我会用你的建议:)。 – 2014-09-13 12:33:10