سؤال

عندما أقوم بتمرير سلسلة تحتوي على محتوى HTML كعنصر صفيف إلى ملف UIActivityViewController initWithActivityItems الطريقة لا تقدمه كـ HTML في وحدة التحكم "المشاركة" المحددة، ولكنها تقدم بدلاً من ذلك مصدر HTML (أي.الترميز بدلاً من تفسيره).

وبينما أستطيع أن أفهم سبب قيامه بذلك لأهداف المشاركة التي لا تدعم محتوى HTML، فإنه لن يفسره لأشياء مثل البريد الإلكتروني أيضًا، والتي تفعل ذلك (في السابق كان يتم ذلك عن طريق تعيين isHTML الملكية ل YES على ال MFMailComposeController).

هل يجب أن أضيع وقتي في إنشاء ملف UIActivityItemProvider الذي يُرجع محتوى مخصصًا بناءً على "نوع النشاط" أو أنه لا توجد طريقة حقًا للحصول على وحدة تحكم البريد المقدمة من قبل UIActivityViewController لتفسير المحتوى على أنه HTML؟

هل كانت مفيدة؟

المحلول

ما هي الأنشطة التي تتطلع إلى دعمها؟تعتمد أنواع الأنشطة على الخدمة، وهي جميلة محددة بوضوح.لا توجد طريقة تتيح للخدمات معرفة أن السلسلة عبارة عن نص عادي أو نص مرمز، على سبيل المثال - قد ترغب في لصق كود HTML عن قصد.

يمكنك دائمًا القيام بالأشياء بالطريقة القديمة ونسخ نص عادي وHTML إلى لوحة اللصق، أو الاتصال بمؤلف البريد مباشرة، أو أي شيء تحاول إنجازه.

نصائح أخرى

في الاختبار الذي أجريته، إذا كانت السلسلة تبدأ بـ "<html><body>" وتنتهي بـ "</body></html>"، فسيتم التعامل معها على أنها HTML.

إذا كنت تريد الحصول على نتيجة جيدة مع خدمات المشاركة التي لا تعتمد على HTML، فإنك تحتاج بدلاً من ذلك إلى استخدام كائن يقوم بتنفيذ UIActivityItemSource البروتوكول وإرجاع سلسلة HTML عندما يكون من -activityViewControllerPlaceholderItem: و من -activityViewController:itemForActivityType: إذا كان النشاط UIActivityTypeMail و nil خلاف ذلك.

ثانية UIActivityItemSource تقوم بإرجاع سلسلة مناسبة غير HTML من -activityViewControllerPlaceholderItem: و من -activityViewController:itemForActivityType: إذا لم يكن النشاط UIActivityTypeMailnil إذا كان كذلك) هو بقية اللغز.

أوصي بعدم استخدام كائن واحد للقيام بالوظيفتين، كما هو الحال في UIActivity يحق للمحرك اتخاذ قرارات مختلفة بناءً على ما إذا كان العنصر النائب يبدو وكأنه HTML أم لا.

لم أجرب أيًا من هذه الأشياء، لكنها بدت معقولة لهدفك عندما كنت أتعرف على UIActivityViewController.

1) يمكنك كتابة مصدر HTML إلى ملف محلي، على سبيل المثال، my_mail_message.html, ، ثم قم ببناء NSURL كائن بهذا الملف، على سبيل المثال، [NSURL URLWithString:@"file://my_mail_message.html"], ، ثم استخدم ذلك NSURL كائن كعنصر من عناصر activityItems المصفوفة التي تتغذى عليها initWithActivityItems:applicationActivities:.

2) إذا كنت تعرف المستلم المقصود، على سبيل المثال، foo@example.com, ، ربما يمكنك بناء NSURL كائن مع mailto المخطط ومصدر HTML باسم body, ، مثل ذلك: mailto:foo@example.com?body={my HTML source goes here}.يجب عليك حذف الأقواس المتعرجة {}.كما كان من قبل، يجب عليك بعد ذلك استخدام ذلك NSURL كائن كعنصر من عناصر activityItems مجموعة مصفوفة.

نأمل أن يعطيك هذا بعض الأفكار.

كل ما عليك فعله هو التأكد من أن السطر الأول من سلسلة HTML عبارة عن علامة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top