自定义SLComposeServiceViewController弹出共享扩展iOS 8

时间:2014-10-14 13:40:27

标签: objective-c ios8-extension

我已在我的应用程序中集成了共享扩展,但我想在SLComposeServiceViewController中按照项目要求进行一些修改,例如更改按钮标题并设置文本视图和标题的背景颜色。我该怎么做?

4 个答案:

答案 0 :(得分:5)

我正在回答我的问题,如果有人可以帮助解决这个问题。经过许多文章和阅读后,我提出了以下解决方案。因为没有足够的内容可供尝试。

我将基类SLComposeServiceViewController更改为UIViewController,以便我可以进行一些自定义。因此,我们知道我们可以添加像evernote这样的弹出窗口,我们也可以将animationt应用到该弹出窗口。

你可以在viewController的viewddidload方法中获得post方法回调。你可以这样做:

- (void)viewDidLoad {
    NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
    NSItemProvider *itemProvider = item.attachments.firstObject;

    if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) {
        [itemProvider loadItemForTypeIdentifier:@"public.url"
                                        options:nil
                              completionHandler:^(NSURL *url, NSError *error) {
                                  NSString *urlString = url.absoluteString;
                                  NSLog(@"%@",urlString);

                          }];
    }
}

从上面的代码中,您可以获得网址链接。有关获取图像和其他内容的更多信息,请参阅Apple文档。

Apple Documentation

答案 1 :(得分:1)

您可以更改,例如这样做的按钮标题为SLComposeServiceViewController

class CustomServiceViewController: SLComposeServiceViewController {
    override func viewDidLoad() {
        let navigationBar = view.subviews.first?.subviews?.last? as? UINavigationBar
        let postButton = navigationBar?.subviews.last? as? UIButton
        let cancelButton = navigationBar?.subviews.last? as? UIButton
        postButton?.setTitle("Done", forState: .Normal)
    }
}

警告 - 这是一个脆弱的解决方案,基于SLComposeServiceViewController的无证内部

答案 2 :(得分:0)

这适用于Xcode 6.4和iOS 8.4

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    for(UIView* v in self.navigationController.navigationBar.subviews){
        if(![v isKindOfClass:[UIButton class]]){
            continue;
        }
        UIBarButtonItem* b = (UIBarButtonItem*)v;
        if([b.title isEqualToString:@"Post"]){
            b.title = @"Save";
        }
    }
}

请注意它在viewDidAppear中而不是viewDidLoad。该按钮实际上是UINavigationButton的一个实例,但我将其转换为UIBarButtonItem,它是公共对应物。我还没有验证这是否会超过Apple审核,因为他们可以使用私有API来争论它。如果帖子标题被其他语言本地化,那么这不会起作用,但这不是什么大问题,因为更改标题是purley化妆品。由于某些国家的左翼问题,我不愿意根据其子视图顺序更改标题,但是可以做的一件事就是检查哪个是粗体/边框,并且是发布按钮。

答案 3 :(得分:0)

要更改发布按钮文字,这里有一个最有可能通过审核的Swift解决方案(请注意,我还没有尝试过)。在SLComposeServiceViewController子类中执行:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    // Reset Post button text.
    for item in (self.navigationController?.navigationBar.items)! {
        if let rightItem = item.rightBarButtonItem {
            rightItem.title = "Save"
            break
        }
    }
}