SideMenu:如何包含在 Objective-C 项目中?
Posted
技术标签:
【中文标题】SideMenu:如何包含在 Objective-C 项目中?【英文标题】:SideMenu: How to include in Objective-C project? 【发布时间】:2020-09-29 10:25:59 【问题描述】:我正在尝试在我的 Objective-C 代码中使用项目 SideMenu (https://github.com/jonkykong/SideMenu)(我看到了 @objc/@objcMembers 语法,所以我猜它应该是可能的)并且我没有使用故事板. 在这种情况下可以使用控制器吗?如果是这样,怎么做? 似乎我正确地导入了模块,因为我能够看到具有自动完成功能的类,但是如果我尝试实例化 SideMenuNavigationController,我将无法访问 initWithRootViewController 方法。 有没有人可以指出我正确的方向? 谢谢
【问题讨论】:
很快就会是:SideMenuNavigationController(rootViewController: YourViewController)
或 SideMenuNavigationController.init(rootViewController: YourViewController)
是的,这就是我在文档中找到的。在 Obj-C 中,我会使用 [[SideMenuNavigationController alloc] initWithRootViewController:YourViewController]
,但它无法识别该方法,即使 Swift 代码中有 @objcMembers 声明也是如此。有什么想法吗?
【参考方案1】:
不确定您是否已经弄清楚了,但在 Objective-C 中,该类被公开为 UISideMenuNavigationController
。所以,你最终得到:
UISideMenuNavigationController *menu = [[UISideMenuNavigationController alloc] initWithRootViewController:controller];
【讨论】:
您好 Jeremy,感谢您的建议。不幸的是,在尝试您的解决方案时出现错误:'initWithRootViewController:' is unavailable Unknown receiver 'UISideMenuNavigationController'; did you mean 'SideMenuNavigationController'? Replace 'UISideMenuNavigationController' with 'SideMenuNavigationController'
用 SideMenuNavigationController 替换 UISideMenuNavigationController 会导致错误:'initWithRootViewController:' is unavailable
@zionun : 你找到解决方案了吗。我也面临同样的问题。
@DaxeshNagar 是的,我使用了该项目的一个分支。你可以像这样把它放在你的 Podfile 中:pod 'SideMenu', :git => 'https://github.com/DanielFontes/SideMenu.git', :commit => '52361cfee8cd89698cc131729d9f337d8fafcffe';
然后,你可以像往常一样使用 Objective-C 类来实例化它。
@DaxeshNagar 这是我在项目中如何使用它的示例:SideMenuSettings *_settings = [[SideMenuSettings alloc] init]; [_settings setPresentationStyle:SideMenuPresentationStyle.menuSlideIn]; SideMenuPresentationStyle *_style = _settings.presentationStyle; _style.presentingScaleFactor = 0.9; SideMenuNavigationController *_sideMenu = [[SideMenuNavigationController alloc] initWithRootViewController:sectionsView settings:_settings]; [_sideMenu setLeftSide:YES]; [[SideMenuManager defaultManager] setLeftMenuNavigationController:_sideMenu];
【参考方案2】:
这是我采用的解决方案,以防有人遇到同样的问题。 在您的 pod 文件中,使用 SideMenu 项目的这个分支:
pod 'SideMenu', :git => 'https://github.com/DanielFontes/SideMenu.git', :commit => '52361cfee8cd89698cc131729d9f337d8fafcffe';
然后,您可以像通常使用 Objective-C 类一样实例化 SideMenu;这是我在项目中的配置方式:
YourViewController *_view = [[YourViewController alloc] initWithNibName:@"NibName" bundle:nil];
SideMenuSettings *_settings = [[SideMenuSettings alloc] init];
[_settings setPresentationStyle:SideMenuPresentationStyle.menuSlideIn];
SideMenuPresentationStyle *_selectedPresentationStyle = _settings.presentationStyle;
_selectedPresentationStyle.presentingScaleFactor = 0.9;
float width = (self.isiPad)?570:300;
[_settings setMenuWidth:width];
SideMenuNavigationController *_sideMenu = [[SideMenuNavigationController alloc] initWithRootViewController:_view settings:_settings];
[_sideMenu setSideMenuDelegate:self];
[_sideMenu setNavigationBarHidden:YES];
[_sideMenu setLeftSide:YES];
[_sideMenu setStatusBarEndAlpha:0];
[[SideMenuManager defaultManager] setLeftMenuNavigationController:_sideMenu];
[[SideMenuManager defaultManager] addPanGestureToPresentToView:_firstViewController.navigationController.navigationBar];
[[SideMenuManager defaultManager] addScreenEdgePanGesturesToPresentToView:_firstViewController.view];
【讨论】:
以上是关于SideMenu:如何包含在 Objective-C 项目中?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 POD 和 Carthage 的情况下添加 SideMenu?