Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.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推送uiviewcontroller_Ios_Uitableview_Uinavigationcontroller - Fatal编程技术网

Ios 如何从属于子类的uitableview推送uiviewcontroller

Ios 如何从属于子类的uitableview推送uiviewcontroller,ios,uitableview,uinavigationcontroller,Ios,Uitableview,Uinavigationcontroller,我有一个UIViewController,其中添加了UITableView的子类作为子视图 e、 g 在ViewControllerviewDidLoad中,我创建了一个ItemList(ItemList)对象,并将其添加到ViewController的视图中 - (void)viewDidLoad { ... [self.view addSubview:itemList]; } 在ItemList的didselectrowatinexpath中,这是一个UITableView我无权访问

我有一个
UIViewController
,其中添加了
UITableView
的子类作为子视图

e、 g

ViewController
viewDidLoad
中,我创建了一个
ItemList
ItemList
)对象,并将其添加到
ViewController
的视图中

- (void)viewDidLoad {
 ...
  [self.view addSubview:itemList];
}
ItemList
didselectrowatinexpath
中,这是一个
UITableView
我无权访问导航控制器,因此如何将另一个
viewcontroller
推到
导航控制器上

@implementation ItemList
{
 ...
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

        [self.navigationController pushViewController:newViewControllerobject animated:YES];

    }

}

在itemList类中创建属性,例如:
ViewController*mydelegate
。 在ViewController的
viewDidLoad
中添加项目列表时,请添加以下内容

 itemList.myDelegate = self;
前进..我选择了

 @implementation ItemList
@synthesize mydelegate;
    {
     ...
        - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

            [myDelegate.navigationController pushViewController:newViewControllerobject animated:YES];

        }

}

如果您在AppDelegate中定义了第一个navigationController,则可以使用以下代码查找最上面的navigationController,然后将viewController推到其上

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
[appDelegate.navigationController.visibleViewController.navigationController pushViewController:newViewControllerobject animated:YES];

[[self superview]导航控制器]。试试这个@hpiOSCoder:通过尝试上述操作,可以访问视图(superView),而不是viewController@AppleDelegate哎呀。。。这是正确的!是的,我就是这么想的。我将以您的方式实现它,直到有人提出不同的建议。上面使用的委托设计模式是在两个类之间设计代码以在必要时使用协议(在本例中为UITableView方法)的最佳方式
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
[appDelegate.navigationController.visibleViewController.navigationController pushViewController:newViewControllerobject animated:YES];