UIActivityViewController премахва излишното пространство при споделяне в Messages

Имам подобен код в моя проект и получавам излишно пространство между елементите за споделяне. Възможно ли е да го премахнете?

let text = "Some text\n"
let link = NSURL(string: "http://stackoverflow.com/")!

let items = [text, link]
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

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

въведете описание на изображението тук


person ChikabuZ    schedule 13.09.2015    source източник
comment
Къде е отново празното място?   -  person gran_profaci    schedule 16.09.2015
comment
В началото url.   -  person ChikabuZ    schedule 16.09.2015
comment
Защо добавяте \n в края на текста? Без знака връзката също започва от следващия ред в моето устройство.   -  person KudoCC    schedule 16.09.2015
comment
Ако премахна \n, в един ред ще има [текст][интервал][връзка]. Трябва да премахна място.   -  person ChikabuZ    schedule 16.09.2015


Отговори (4)


Използвайте NSString вместо NSURL според посочения по-долу код:

NSString *text = @"Some Text";
NSString *URL = @"\nhttp://www.apple.com";
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[text, URL] applicationActivities:nil];

[self presentViewController:controller animated:YES completion:nil];

-------------------Swift код (според въпрос)-------------

let text = "Some text"
let link = "\nhttp://stackoverflow.com/"

let items = [text, link]
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

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

Можете да видите приложените екранни снимки. След като публикувате/изпратите съобщение, то все още ще се показва като връзка.

URL добавя интервал по подразбиране, ако URL адресът не е първият обект в масива с елементи на дейността.

Надявам се това да помогне.

въведете описание на изображението тук

person Dharmesh Siddhpura    schedule 16.09.2015
comment
В моя случай изглежда така: if activityType == UIActivityTypeMessage { return \n + url.absoluteString! } - person ChikabuZ; 16.09.2015
comment
@Dharmesh За да отговоря на вашето запитване, има 24 часа гратисен период след края на наградата. Ако наградата не е присъдена ръчно в края на гратисния период, тя се присъжда на приетия отговор или в противен случай на най-високо гласувания (връзките, прекъснати от най-ранния публикуван час) - person Bohemian♦; 24.09.2015

Актуализация: Ето едно комплексно решение. Изглежда, че само „Съобщение“ не работи, така че използвам два обекта за дейност, за да заобиколя.

Трябва да създадете два класа, които отговарят на протокола UIActivityItemSource. Не съм запознат с Swift, така че те са внедрени с Objective-C, вярвам, че можете да разберете.

1 ActivityObject клас

@interface ActivityObject : NSObject

@end

@implementation ActivityObject

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"some Text";
}

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:@"com.apple.UIKit.activity.Message"]) {
        return @"Some text\nhttp://stackoverflow.com/";
    } else {
        return @"Some text";
    }
}
@end

2 ActivityObjectURL клас

@interface ActivityObjectURL : NSObject

@end

@implementation ActivityObjectURL

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"";
}

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:@"com.apple.UIKit.activity.Message"]) {
        return @"";
    } else {
        return [NSURL URLWithString:@"http://stackoverflow.com"];
    }
}

@end

След това ги използвайте така.

ActivityObject *o = [[ActivityObject alloc] init];
ActivityObjectURL *ol = [[ActivityObjectURL alloc] init];
UIActivityViewController *avc = [[UIActivityViewController alloc] initWithActivityItems:@[o, ol] applicationActivities:nil];
[self presentViewController:avc animated:YES completion:nil];

Решението на @dsiddhpura ще добави странно прекъсване на ред в приложението Mail.

въведете описание на изображението тук въведете описание на изображението тук

person KudoCC    schedule 16.09.2015
comment
Да, ще работи, но няма да работи например в twitter, търся универсално решение. - person ChikabuZ; 16.09.2015
comment
Няма универсално решение. Ако декларирате NSURL обект, винаги ще има интервал, тъй като е дадена рамка на iOS. Ако поставите URL адреса като част от низ, URL адресът е текст и следователно не се разпознава. Единственото изключение от това, ако получаващото приложение анализира текста директно или индиректно. Директно трябва да е ясно. Индиректно би означавало UITextField или UIWebView с активирано откриване на връзка. - person Helge Becker; 16.09.2015
comment
Благодаря ви, чакам, може би има още по-добър отговор. - person ChikabuZ; 16.09.2015

Мисля, че някъде другаде трябва да има нещо нередно. Опитах се да възпроизведа вашия случай със следния кодов блок

    let text = "Some text"
    let text2 = "ABC text"
    let text3 = "DEF text"
    let link = NSURL(string: "http://stackoverflow.com/")!

    let items = [text, text2, text3, link]
    let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

    self.presentViewController(activityVC, animated: true, completion: nil)
  1. Когато изберете „Копиране“, след което го поставете, получих: Some text ABC text DEF text http://stackoverflow.com/

  2. Когато избера споделяне чрез съобщение, получих Some text ABC text DEF text http://stackoverflow.com/

което е правилно (по подразбиране) поведение. Невъзможно е да промените това поведение по подразбиране между другото.

Ако все пак искате да го направите, променете своя текстов формат, както @KudoCC предложи, или създайте персонализиран UIActivity е единственият избор.

Късмет

person Ducky    schedule 16.09.2015
comment
Ако споделите в Messages, ще има празни места. - person ChikabuZ; 16.09.2015

Опитай.

let text = "Some text"
let link = NSURL(string: "\nhttp://stackoverflow.com/")!
let items = [text, link]
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)
self.presentViewController(activityVC, animated: true, completion: nil)
person Sankalap Yaduraj Singh    schedule 18.09.2015