首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ios共享扩展post按钮标题

ios共享扩展post按钮标题
EN

Stack Overflow用户
提问于 2015-02-12 14:21:39
回答 2查看 3.4K关注 0票数 7

我想在SLComposeServiceViewController中更改post按钮的标题。我设法得到了UIButton:

代码语言:javascript
运行
复制
NSArray* subviews =[self.navigationController.navigationBar subviews];
UIButton* postButton =[subviews lastObject];

我试着像这样设置标题:

代码语言:javascript
运行
复制
[postButton setTitle:@"Save" forState:UIControlStateNormal];

但标题没有变。

有人能帮我吗?

我在我的iPad上看到了Evernote的份额扩展,它看起来如下:

更新

我的解决方案:

我找到了解决我的问题,我删除了原来的导航栏,并创建自定义导航栏。

我有两个导航栏: 1.带有“取消”\“保存”按钮;2.带有“后退”按钮

当导航到其他视图控制器时,我会更改它们(在我的例子中,我需要上传文件,用户需要从列表中选择位置)

注意:如果您没有实现configurationItems,您只需要第一个导航条。(只需从viewDidAppear调用设置自定义导航栏即可

所以我的代码在这里:

代码语言:javascript
运行
复制
@property (strong, nonatomic) UINavigationBar *customNavBar;

-(void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];  
    self.customNavBar = [[UINavigationBar alloc] initWithFrame:self.navigationController.navigationBar.bounds];
    [self.navigationController.navigationBar removeFromSuperview];
    [self.navigationController.view addSubview:self.customNavBar];
    [self setCancelSaveNavigationItem];
}

setCancelSaveNavigationItem->从viewDidAppear of shareViewController调用

代码语言:javascript
运行
复制
-(void)setCancelSaveNavigationItem
{
    UINavigationItem *newItem = [[UINavigationItem alloc] init];
    UIBarButtonItem *cancelBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Cancel",nil)  style:UIBarButtonItemStylePlain target:self action:@selector(cancelButtonTapped:)];
    UIBarButtonItem *saveBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Done",nil)  style:UIBarButtonItemStyleDone target:self action:@selector(saveButtonTapped:)];
    newItem.leftBarButtonItem = cancelBarButtonItem;
    newItem.rightBarButtonItem = saveBarButtonItem;
    [self.customNavBar setItems:@[newItem]];
    [self.navigationItem setBackBarButtonItem:cancelBarButtonItem];
    [self.navigationItem setRightBarButtonItem:saveBarButtonItem];
    if(self.item.value == nil){
        saveBarButtonItem.enabled = NO;
    }
}

setBackNavigationItem->在configurationItems中调用->在self.item.tapHandler函数中调用

代码语言:javascript
运行
复制
-(void)setBackNavigationItem
{
    UINavigationItem *newItem = [[UINavigationItem alloc] init];
    UIBarButtonItem *selectBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Select",nil)  style:UIBarButtonItemStylePlain target:self action:@selector(selectButtonTapped:)];
    UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:[NSString stringWithFormat:@"❮ %@", NSLocalizedString(@"Back",nil)]  style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped:)];
    newItem.leftBarButtonItem = backBarButtonItem;
    newItem.rightBarButtonItem = selectBarButtonItem;
    [self.customNavBar setItems:@[newItem]];
    [self.navigationItem setBackBarButtonItem:backBarButtonItem];
    [self.navigationItem setRightBarButtonItem:selectBarButtonItem];
}

按下手柄按钮:

代码语言:javascript
运行
复制
- (void)backButtonTapped:(id)sender {
    if([self.navigationController.viewControllers count] ==2){
        [self setCancelSaveNavigationItem];
    }
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)cancelButtonTapped:(id)sender {
    [self cancel];
}

- (void)selectButtonTapped:(id)sender {
    ...
    [self setCancelSaveNavigationItem];
    [self popConfigurationViewController];
}

- (void)saveButtonTapped:(id)sender {
    ...
    [self cancel];
}

这是我的工作!

结果:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-12 17:23:13

你的代码:

代码语言:javascript
运行
复制
NSArray* subviews =[self.navigationController.navigationBar subviews];
UIButton* postButton =[subviews lastObject];

...is a确实是个坏主意。这仅仅是因为post按钮位于subviews中,是数组中的最后一项。但是subviews的内容是没有文档的,并且随时可能发生变化。而且,由于这个按钮没有公共API,所以完全有可能有框架代码来防止或覆盖按钮文本的更改--所以即使我们假设您有正确的UI元素,您仍然无法更改它。

几乎可以肯定,Evernote的UI是一个完全定制的设计,它只是类似于SLComposeServiceViewController。使用SLComposeServiceViewController不需要共享扩展,这只是为了方便。如果它不能满足你的需要,设计你自己的。

更新:出于好奇,我解开了Evernote IPA的拉链,查看了EvernoteShare.appexnm。没有对SLComposeServiceViewController的引用,这证实了Evernote没有在它们的扩展中使用该类。

票数 7
EN

Stack Overflow用户

发布于 2017-07-10 04:17:36

简约在viewDidAppear

代码语言:javascript
运行
复制
self.navigationController?.navigationBar.topItem?.rightBarButtonItem?.title = "Save"
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28479859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档