是否有动作来追踪前一个屏幕并使用它来更改另一个屏幕中的某些内容?

Posted

技术标签:

【中文标题】是否有动作来追踪前一个屏幕并使用它来更改另一个屏幕中的某些内容?【英文标题】:Is there an action to track down the previous screen and use it to change something in another screen? 【发布时间】:2013-05-23 16:05:39 【问题描述】:

有没有类似的动作:

if (previous_view.title = @"newyork")

mapPin.pinColor = MKPinAnnotationColorGreen;


if (previous_view.title = @"washington")

mapPin.pinColor = MKPinAnnotationColorPurple;

我正在创建一个有地图的应用程序,如果你点击一个图钉的注释,它会导致一个带有按钮图的屏幕,如果我点击它,那么图钉需要更改为不同的颜色,我想知道是否存在这样的操作,它会基于前一个视图的名称或任何其他属性(它来自哪里)。

这是我按下注释后用于转到下一个屏幕的代码:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

if ([view.annotation.title isEqual: @"New York"])
    
    newyork *controller1 = [[[newyork alloc] initWithNibName:@"newyork" bundle:nil] autorelease];
    controller1.delegate = self;
    controller1.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentViewController:controller1 animated:YES completion:nil];
    

这是 newyork.m 文件中的代码,它是按下地图按钮时发生的操作:

- (IBAction)mapPressed:(id)sender

map *controller1 = [[[map alloc] initWithNibName:@"map" bundle:nil] autorelease];
controller1.delegate = self;
controller1.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:controller1 animated:YES completion:nil];

我真的需要帮助! 任何帮助表示赞赏。

【问题讨论】:

这个问题很混乱。发布的(无效)代码与非常不清楚的问题有什么关系? “行动”是什么意思? 我想你想循环浏览当前 UIView 的超级视图的子视图...或类似的东西? 你写过响应注解点击并用按钮显示屏幕的代码吗?也许发布该代码会对您的问题有所帮助。如果您还没有编写注释点击处理代码,请在继续之前解决它。 在mapPressed中,你确定要新建一个地图vc吗?难道你不想调用dismissViewControllerAnimated,让它回到它来自的地图vc吗? 我也可以这样做,但我认为这并不重要。如果以这种方式更改图钉颜色更容易,我会这样做。 【参考方案1】:

我假设“视图”是指“视图控制器”。

在那个假设之后。是的,如果您使用 UINavigationController 并将视图控制器推送到该导航控制器上,您可以检查这一点。这样做:

UIViewController *previousController = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count - 2];

if ([previousController.title isEqual:@"something"]) 
    // Do Something

但这不是建议的方法。您不应该依赖导航控制器堆栈来执行视图控制器上的条件操作。您应该将此参数传递给您的视图控制器,最好是在初始化时。喜欢:

[[SomeViewContoller alloc] initWithStateName:stateName];

【讨论】:

如果地图所在的view叫做UIViewController,里面只有一个MKMapView呢? 有没有类似你给出的第一段代码,但不是用于导航控制器,因为我不使用它们。【参考方案2】:

MKAnnotationView 类参考

注释视图支持选择状态的概念,它决定了视图是未选中、选中还是选中并显示标准标注视图。用户通过与注释视图的交互在选择状态之间切换。在未选中状态下,注释视图显示但不突出显示。在选中状态下,注释会突出显示,但标注不会显示。最后,注释可以同时突出显示和标注。标注视图显示附加信息,例如标题字符串和用于查看更多信息的控件。标题信息由注释对象提供,但您的注释视图负责提供任何自定义控件。有关详细信息,请参阅子类化说明。

所以你可以做的是子类化 MKAnnotationView 并覆盖 -(void)setSelected:animated: 方法。

【讨论】:

以上是关于是否有动作来追踪前一个屏幕并使用它来更改另一个屏幕中的某些内容?的主要内容,如果未能解决你的问题,请参考以下文章

使用屏幕中的动作来影响其他屏幕中的事件

如何更改 Google 同意屏幕电子邮件?

Kivy - 另一个屏幕上的滑块类值更改

在反应加载屏幕中保持几个动作

UIScrollView 在动画后更改页面

如何更改 UITableViewCell 宽度?