Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 UITableViewCell中的UINavigationController_Ios_Uinavigationcontroller_Mkmapview_Uitableview - Fatal编程技术网

Ios UITableViewCell中的UINavigationController

Ios UITableViewCell中的UINavigationController,ios,uinavigationcontroller,mkmapview,uitableview,Ios,Uinavigationcontroller,Mkmapview,Uitableview,我使用以下属性创建了自定义UITableViewCell: @property (nonatomic, strong) UINavigationController *navigationController; 合成: @syntethized navigationController = _navigationController “承包商”: 方法: - (IBAction)viewMapAction:(id)sender { MyViewController *controlle

我使用以下属性创建了自定义UITableViewCell:

@property (nonatomic, strong) UINavigationController *navigationController;
合成:

@syntethized navigationController = _navigationController
“承包商”:

方法:

- (IBAction)viewMapAction:(id)sender {
   MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    [_navigationController pushViewController:controller animated:YES];
}
当我按下我的
CustomCell
内的按钮时,导航控制器会正常按下
MyViewController
。在
MyViewController
内部有一个带有注释的
MKMapView
,在
MyViewController
[\u mapView selectAnnotation:myAnnotation]
viewDidAppra
中调用了该视图,但没有显示一个注释(弹出窗口)。如果按“注释”,则标注也不会显示

为什么?


如果我更改我的
CustomCell
的构造函数/属性,并传递一个目标/选择器而不是
UINavigationController
,并在我的
UITableViewController
中而不是在我的
CustomCell
中创建一个
viewmappaction
,则地图标注将正常显示。但我会把所有的细胞活动集中在细胞类中。

把所有细胞活动集中在细胞类中——这听起来不是个好主意。请记住,表视图单元格是视图,因此根据MVC模式,它们只是用户的界面。控制器应该处理视图中的操作,就像推动其他控制器一样。(根据我的经验,视图通常甚至不知道它们的控制器存在。)让当前视图控制器负责将其他视图控制器推到其上更合理,对吗

因此,如果您想要一个设计友好的解决方案,请让您的表视图控制器在
cellforrowatinexpath
中将单元格出列。cell类可以在构造函数方法中完成单元格的所有其他初始化。但关键是,单元不必知道任何视图控制器。然后,使表视图控制器成为单元格的委托(您必须创建此委托),并添加委托方法来处理在按下映射按钮时按下新视图控制器的操作

如果您担心可重用性,这种方法应该对您有好处。只要在需要这样一个表的地方插入表视图控制器子类。或者,为实现此功能的
UITableViewController
创建一个子类,然后针对需要在其中显示这些单元格的每种情况进一步为此类创建子类

我知道这并不能解决地图标注的问题,但我认为您会发现,通过更好地规划类结构,可以完全避免这些模糊的问题。希望这有帮助

- (IBAction)viewMapAction:(id)sender {
   MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    [_navigationController pushViewController:controller animated:YES];
}