Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何为委托和数据源加载具有单独子类的UITableView?_Ios_Objective C_Iphone_Uitableview_Uiviewcontroller - Fatal编程技术网

Ios 如何为委托和数据源加载具有单独子类的UITableView?

Ios 如何为委托和数据源加载具有单独子类的UITableView?,ios,objective-c,iphone,uitableview,uiviewcontroller,Ios,Objective C,Iphone,Uitableview,Uiviewcontroller,有一个UIViewController由UITextField和UITableView组成。我有一个独立的UIViewTableViewController子类,用于支持UIViewController中UITableView的委派和数据源(默认)。我可以将UITexField中的文本保存到SecondViewController中,并将其保存到NSMutableArray,但这不会传递到UITableView。如果我只是将一个字符串传递给*单元格,它将显示在UITableView中。 代码如下

有一个
UIViewController
UITextField
UITableView
组成。我有一个独立的
UIViewTableViewController
子类,用于支持
UIViewController
UITableView
的委派和数据源(默认)。我可以将
UITexField
中的文本保存到SecondViewController中,并将其保存到
NSMutableArray
,但这不会传递到
UITableView
。如果我只是将一个字符串传递给*单元格,它将显示在
UITableView
中。 代码如下:

ViewController.h

    #import <UIKit/UIKit.h>
    #import "SecondTableViewController.h"

    @interface ViewController : UIViewController{
        SecondTableViewController *tableController;
    }
    @end

**ViewController.m**

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITableView *table;
@property (weak, nonatomic) IBOutlet UITextField *textField;

@end

@implementation ViewController



- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    tableController = [[SecondTableViewController alloc] init];
    tableController.taskArray = [[NSMutableArray alloc]init];

    self.table.dataSource = tableController;
    self.table.delegate = tableController;
    self.textField.delegate = tableController;

}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
#import <UIKit/UIKit.h>


@interface SecondTableViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate>

@property NSMutableArray *taskArray;
@property NSString *taskString;


@end

我不知道你为什么这样做。我的意思是视图控制器2控制着视图控制器1的外观!!!你不能这样做

但是,您的问题是,
SecondTableViewController
中的
self.tableView
不是您为其设置为委托的表视图
self.
SecondTableViewController
中的tableView
是作为
UITableViewController
的子类而获得的默认表格视图

要解决此问题,有两种解决方案:

解决方案1:摆脱这种混乱的视图层次结构,使用相同的视图控制器 管理这些东西


解决方案2:在右表视图对象上调用
insertRowsAtIndexPaths
。为此,您可以将
tableView
引用从
ViewController
传递到
SecondTableViewController
您在SecondTableViewController中对tableView的引用没有指向您在原始UIViewController中创建的
tableView
变量,因此cellforrowatinexpath不会对其进行任何操作那
tableView
var

TableViewController类有一个名为
tableView
的属性,该属性已经绑定到该类,并引用其父类,然后该类就是委托和数据源。您已断开与委托和数据源的链接,但未断开与tableView属性本身的链接

如果要将委托和数据源与
tableview
所在的类分离,则可以这样做,但不需要使用UITableViewController类。您可以创建一个自定义类子类NSObject,并在其中包含所有这些委托和数据源调用。如果这样做了,那么用于设置tableView的委托和数据源的代码如下所示

 SeparateDataSourceClass *separateClass = [SeparateDataSourceClass new];
 self.table.dataSource = separateClass;
 self.table.delegate = separateClass;
 self.textField.delegate = separateClass;
像这样的,但你可能知道

 SeparateDataSourceClass *separateClass = [SeparateDataSourceClass new];
 self.table.dataSource = separateClass;
 self.table.delegate = separateClass;
 self.textField.delegate = separateClass;