2015-02-22 3 views
2

Когда я просто передаю NSString, все работает отлично, но когда я пытаюсь передать свой пользовательский ItemProvider, я не получаю никаких доступных акций.При использовании подкласса UIActivityItemProvider никаких дополнительных действий при использовании подкласса

MyCustomProvider

class MyCustomProvider: UIActivityItemProvider { 

    var placeholder: String! 
    var alternate: String! 


    init(placeholder: String, alternate: String) { 
     self.placeholder = placeholder 
     self.alternate = alternate 

     super.init() 
    } 

    override func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? { 
     if activityType == UIActivityTypeMessage { 
      return NSString(string: alternate) 
     } else { 
      return NSString(string: placeholder) 
     } 
    } 
} 

Где я исполню:

var stringToShare = MyCustomProvider(placeholder: "Placeholder", alternate: "Alternate") 

var sharingItems = [AnyObject]() 
sharingItems.append(stringToShare) 

let activityViewController = UIActivityViewController(activityItems: sharingItems, applicationActivities: nil) 

activityViewController.excludedActivityTypes = [UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypeAirDrop] 

self.presentViewController(activityViewController, animated: true, completion: nil) 

Когда stringToShare выше, вместо этого NSString(string: "Placeholder"), все работает отлично. Что я испортил в своей реализации?

+0

Я пробовал много вещей. Ничего не работает. – David

ответ

2

я решил его вместо того, чтобы делать следующее:

class MyCustomProvider: NSObject, UIActivityItemSource { 

    var placeholder: String! 
    var alternate: String! 


    init(placeholder: String, alternate: String) { 
     self.placeholder = placeholder 
     self.alternate = alternate 

     super.init() 
    } 

    func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject { 
     return NSString(string: placeholder) 
    } 

    func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? { 
     if activityType == UIActivityTypeMessage { 
      return NSString(string: alternate) 
     } else { 
      return NSString(string: placeholder) 
     } 
    } 
} 

Я не знаю, почему, но это работает.

1

Верю, что вы должны установить placeholderItem в тип, который вы собираетесь вернуть в item().

Объект, который может стоять за фактический объект, который вы планируете создать. Содержимое объекта может быть пустым, но класс объекта должен соответствовать классу объекта, который вы планируете предоставить позже.

Смежные вопросы