我想在SLComposeServiceViewController中更改post按钮的标题。我设法得到了UIButton:
NSArray* subviews =[self.navigationController.navigationBar subviews];
UIButton* postButton =[subviews lastObject];
我试着像这样设置标题:
[postButton setTitle:@"Save" forState:UIControlStateNormal];
但标题没有变。
有人能帮我吗?
我在我的iPad上看到了Evernote的份额扩展,它看起来如下:
更新
我的解决方案:
我找到了解决我的问题,我删除了原来的导航栏,并创建自定义导航栏。
我有两个导航栏: 1.带有“取消”\“保存”按钮;2.带有“后退”按钮
当导航到其他视图控制器时,我会更改它们(在我的例子中,我需要上传文件,用户需要从列表中选择位置)
注意:如果您没有实现configurationItems
,您只需要第一个导航条。(只需从viewDidAppear
调用设置自定义导航栏即可
所以我的代码在这里:
@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调用
-(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
函数中调用
-(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];
}
按下手柄按钮:
- (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];
}
这是我的工作!
结果:
发布于 2015-02-12 17:23:13
你的代码:
NSArray* subviews =[self.navigationController.navigationBar subviews];
UIButton* postButton =[subviews lastObject];
...is a确实是个坏主意。这仅仅是因为post按钮位于subviews
中,是数组中的最后一项。但是subviews
的内容是没有文档的,并且随时可能发生变化。而且,由于这个按钮没有公共API,所以完全有可能有框架代码来防止或覆盖按钮文本的更改--所以即使我们假设您有正确的UI元素,您仍然无法更改它。
几乎可以肯定,Evernote的UI是一个完全定制的设计,它只是类似于SLComposeServiceViewController
。使用SLComposeServiceViewController
不需要共享扩展,这只是为了方便。如果它不能满足你的需要,设计你自己的。
更新:出于好奇,我解开了Evernote IPA的拉链,查看了EvernoteShare.appex
和nm。没有对SLComposeServiceViewController
的引用,这证实了Evernote没有在它们的扩展中使用该类。
发布于 2017-07-10 04:17:36
简约在viewDidAppear
中
self.navigationController?.navigationBar.topItem?.rightBarButtonItem?.title = "Save"
https://stackoverflow.com/questions/28479859
复制相似问题