Objective c - UIActivityViewController 和 navigationItem.leftBarButtonItem 的组合

Posted

技术标签:

【中文标题】Objective c - UIActivityViewController 和 navigationItem.leftBarButtonItem 的组合【英文标题】:Objective c - Combination of UIActivityViewController and navigationItem.leftBarButtonItem 【发布时间】:2015-11-04 12:11:56 【问题描述】:

我正在使用导航栏,我正在使用代码将默认后退按钮更改为我在 viewDidLoad 中的按钮:

_backButton =[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)];
[_backButton setTintColor:[UIColor whiteColor]];
[_backButton setImage:[UIImage imageNamed:@"Back-icon.png"]];
self.navigationItem.leftBarButtonItem = _backButton;

我有一个 UIButton 用于分享,当我点击它时,这段代码正在运行:

    UIActivityViewController *activityViewController =
    [[UIActivityViewController alloc] initWithActivityItems:@[@"test"]
                                      applicationActivities:nil];
    [self presentViewController:activityViewController
                       animated:YES
                     completion:^ 
];

现在,当我进入页面时,它看起来不错,但是当我点击分享按钮时,UIActivityViewController 出现了,导航中的后退按钮跳到底部 50 像素 - 就像在这张图片中

当我使用默认的后退按钮时,它不是附加的。

我尝试将 UIActivityViewController 打开的动画更改为 NO,但没有帮助。

可能是什么问题?

谢谢

【问题讨论】:

您正在展示视图控制器。那是为了模态视图。如果您需要导航栏自动设置正确,请使用 push 导航堆栈。 我想以模态方式打开它,它需要按原样打开 UIActivityViewController。它打开它正确 当你展示视图控制器时,它不使用任何导航控制器,所以它没有导航栏。您需要通过storyboard或xib自行添加导航栏。如果您使用自动布局,则需要将其添加为视图的子视图并设置框架和约束。如果你想呈现带有导航功能的模态,你需要呈现包含你的 ActivityViewController 的模态导航控制器。 嗨@Flipper,我不明白你在说什么,我正在用它来呈现UIActivityViewController,就像这篇文章codingexplorer.com/… 【参考方案1】:

将您的后退按钮设置为:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow"] style:UIBarButtonItemStylePlain target:self.navigationController action:@selector(popViewControllerAnimated:)];

如果您在转到前一个控制器时不更新任何对象值或任何 UI,则无需创建返回按钮方法。 如果您为选择器设置任何操作,则使用相应的目标。

当你展示 ActivityController 时:

- (IBAction)commonSharing:(id)sender

    NSString *strTextToShare = @"Hi... Friends";
    UIImage *imgToShare = [UIImage imageNamed:@"wall1.png"];
    NSURL *urlToShare = [NSURL URLWithString:@"https://www.apple.com"];

    UIActivityViewController *shareController = [[UIActivityViewController alloc] initWithActivityItems:@[strTextToShare, imgToShare, urlToShare] applicationActivities :nil];
    //shareController.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll]; // If you want to restrict some of apps to sharing
    [self presentViewController:shareController animated: YES completion: nil];

【讨论】:

我需要将按钮保存在属性_backButton中,所以我使用此代码,基于您的代码,它有帮助,谢谢:_backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@ "MyInventory-Back-icon.png"] 样式:UIBarButtonItemStylePlain 目标:自我操作:@selector(backButtonPressed)]; [_backButton setTintColor:[UIColor whiteColor]]; self.navigationItem.leftBarButtonItem = _backButton;

以上是关于Objective c - UIActivityViewController 和 navigationItem.leftBarButtonItem 的组合的主要内容,如果未能解决你的问题,请参考以下文章

objective-c入门

Objective-C和C的区别

objective-c与C++的区别

在 Mac OS X 上结合 Objective-C 和 C/C++

Objective-C 和 MetroWerks C/C++ IDE

objective-c和Cpp怎么混合编程?