我在设计中依赖 self.parentViewController 和/或 self.presentingViewController 这通常是一个坏兆头

发布于 2024-12-27 10:03:14 字数 502 浏览 1 评论 0原文

我有一个 SubSelectVC 来处理从 SearchVC 模态呈现的子选择选择。 SubSelectVC 有一个 -(void)didSelectRowAtIndexPath 来执行这些选项,大致如下:

if ([[[UIDevice currentDevice] systemVersion] intValue] < 5) {
    ((SearchVC *)self.parentViewController.filters.filterValue = @"Some value";
}
else {
    ((SearchVC *)self.presentingViewController.filters.filterValue = @"Some value";
}

这看起来像是糟糕的设计,但我的意思是,可以选择这样做就在那里,而且非常简单!这是什么问题,我该如何纠正? (我应该使用委托吗?)

I have a SubSelectVC that handles sub-selection choice that is presented modally from a SearchVC. The SubSelectVC has a -(void)didSelectRowAtIndexPath that performs these options, roughly:

if ([[[UIDevice currentDevice] systemVersion] intValue] < 5) {
    ((SearchVC *)self.parentViewController.filters.filterValue = @"Some value";
}
else {
    ((SearchVC *)self.presentingViewController.filters.filterValue = @"Some value";
}

This seems like it screams of bad design but, I mean, the option to do it this way is there and it's so easy! What's wrong with this, and how would I make it right? (Should I use delegation?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

圈圈圆圆圈圈 2025-01-03 10:03:14

是的,我认为更好的封装版本是在 SubSelectVC 的头文件中定义委托协议,并在 SubSelectVC 上定义委托属性。

这样,您的视图控制器就可以重复用于任何需要从列表中进行模式选择的任务。

编辑:添加示例头:

SubSelectVC.h:

@protocol SubSelectVCDelegate

- (void)itemSelected:(NSString *)itemName;

@end

@interface SubSelectVC : UIViewController

@property (assign) id <SubSelectVCDelegate> delegate;

// etc...

@end

Yes, I think a better encapsulated version of this would be to define a delegate protocol in the header file for SubSelectVC, and a delegate property on SubSelectVC.

That way your view controller is reusable for any task that requires modal selection from a list.

EDIT: added example header:

SubSelectVC.h:

@protocol SubSelectVCDelegate

- (void)itemSelected:(NSString *)itemName;

@end

@interface SubSelectVC : UIViewController

@property (assign) id <SubSelectVCDelegate> delegate;

// etc...

@end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文