Uygulamamda entegre bir paylaşım uzantısı var ancak SLComposeServiceViewController'da düğme başlıkları değiştirmek ve metin görünümü için arka plan rengini ayarlamak gibi proje gereksinimlerine göre birkaç değişiklik yapmak istiyorum. başlığı. Bunu nasıl yaparım?SLComposeServiceViewController'ı özelleştirin. Paylaşım eklentisini açın iOS 8
cevap
Birisi buna yardımcı olabilirse sorumu yanıtlıyorum. Birçok makale ve okumadan sonra aşağıdaki çözümü buldum. Çünkü denemek için yeterli içerik yok.
Bazı özelleştirmeler yapabileceğim şekilde temel sınıfı SLComposeServiceViewController'ı UIViewController olarak değiştiriyorum. Bildiğimiz gibi biz de evernote gibi pop-up ekleyebiliriz, ayrıca bu pop-up'a animationt uygulayabiliriz.
Sen böyle bir şey yapabileceği için viewController.Where ait viewddidload yönteminde sonrası yöntem geri arama alabilirsiniz: Eğer url bağlantısını edinmek kod Yukarıdan
- (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);
}];
}
}
. Daha fazla bilgi almak için sadece görüntü ve diğer şeyleri almak için sadece elma dokümantasyonuna başvurunuz.
'un özelleştirilmesi hakkında daha fazla bilgi arıyorum Aynı belgede, UTI tipleri için MobileCoreServices'te tanımlanan sabitlerin kullanılmasının tercih edildiğini düşünüyorum. gibi bir şey: 'if ([currentItem hasItemConformingToTypeIdentifier: (__ köprü NSString *) kUTTypeURL])' –
Sen mesela değiştirebilir bunu yaparak SLComposeServiceViewController
ait düğme başlıkları: - bu 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";
}
}
}
Not Bu Xcode 6.4 itibariyle çalışan SLComposeServiceViewController
Bu artık Xcode 6.2'de çalışır. – CamQuest
belgesiz iç yapıları dayalı kırılgan bir çözümdür ve iOS
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)
}
}
uyardı onun viewDidAppear ve viewDidLoad değil. Düğme aslında bir UINavigationButton örneğidir, ancak onu genel muhatabı olan bir UIBarButtonItem öğesine uyguladım. Apple'ın geçmişini gözden geçirip edemeyeceğini doğrulayamadım çünkü özel bir API kullanabileceğini iddia edebilirler. Mesaj başlığı diğer dillere yerelleştirilirse bu işe yaramaz, ancak bu büyük bir sorun değildir çünkü başlığı değiştirmek purley kozmetiktir. Bazı ülkelerdeki soldan sağa sorun nedeniyle, altyazı sırasına göre başlığı değiştirmek konusunda tereddütlü olurum, ancak yapılması gereken tek şey kalın/kenarlıklı olup olmadığını kontrol etmektir.
Post button metnini değiştirmek için, büyük olasılıkla incelemeyi geçmesi gereken bir Swift çözümü (henüz deneme yapmadım). Bir SLComposeServiceViewController
alt sınıfta yapın:
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
}
}
}
Mükemmel! teşekkür ederim ! – Alfi
[dokümantasyon] (https://developer.apple.com/library/mac/documentation/Social/Reference/SLComposeServiceViewController_Class/) yardımcı olmalıdır. – twe4ked
Ayrıca, SLComposeServiceViewController –