UIActivityViewController 的标题是怎么设置的?
Posted
技术标签:
【中文标题】UIActivityViewController 的标题是怎么设置的?【英文标题】:How is the title of a UIActivityViewController set? 【发布时间】:2020-04-26 04:32:01 【问题描述】:如何设置 UIActivityViewController 的标题?我有一个 UIActivityViewController,它使用自定义 UIActivityItemProvider 和自定义 UIActivity。
UIActivityItemController 顶部显示的标题最初很简单,“/”,没有字幕,然后大约一秒钟后变为“System@snap -2237692”,副标题为“File”,如下图所示。
这些标题来自哪里?如何控制此处显示的内容?
我尝试过显式设置视图控制器的“title”属性,但没有任何区别。
【问题讨论】:
也许这会对你有所帮助? ***.com/questions/59684922/… 使用 UIActivityItemSource 协议...很有意义。但是,我使用的是 UIActivityItemProvider 而不是 UIActivityItemSource (我认为您必须使用其中一个,而不是两者都使用?)。我看不到 UIActivityItemProvider 的任何等效项,这很奇怪,因为它似乎是 UIActivityController 的三个(?)选项中最灵活的。 【参考方案1】:经过一番反复试验,我发现更改占位符项目会更改 UIActivityViewController 中显示的标题,并且标题似乎仅用于文件/URL。
我提供了多种占位符项,其中大部分都是不同数据类型的有效空对象(即数组、字典、数据和打印页面渲染器)。因为它们都是空的,所以 UIActivityViewController 根本不显示这些标题。
但是,我还提供了稍后将生成的文件的 URL。我最初为这个 URL 提供了占位符URL(fileURLWithPath: "")
。所以我猜想标题中显示的初始“/”实际上意味着文件系统根目录。我不知道随后显示的“System@snap-...”是什么意思!
但我发现,如果我将这个特定的占位符项目更改为 URL(fileURLWithPath: "Some Text")
之类的东西,那么我提供的任何文本作为 URL(或实际上作为 URL 的文件名部分 - 即最后一个“之后的所有内容” /",如果有的话)是作为 UIActivityViewController 的标题显示的内容。
所以现在,至少对于这种情况,我找到了一种方法来控制那里显示的标题。更重要的是,要摆脱在这种情况下显示的胡言乱语。
我很欣赏占位符中的 URL 应该与实际项目中的 URL 相同,因此会有一个有意义的名称。但有时我在处理数据之前没有最终文件名,因此在最初提供占位符时无法知道它。
如果有多个占位符项可用于生成有用的标题,我仍然有兴趣了解 UIActivityViewController 如何选择标题。如何选择一个而不是另一个?为什么没有为字符串项或属性字符串项提供标题,而只为文件/URL 项提供标题?
【讨论】:
这实际上取决于您尝试共享的文件数量。如果只有一个文件,它将是文件名,如果有多个文件,它将是 2 个图像或 2 个文档或 2 个图像和 1 个文档等 很公平。尽管我确实发现了其他一些奇怪的行为。例如,如果我包含一个字符串(或属性字符串),它似乎完全被忽略了,因为它是活动视图控制器的标题。 您应该始终使用设备上存在的文件网址 正如我所说,它需要检查 url 的类型标识符来定义其标题 但是我有一些不是文件的项目,也永远不会是文件。例如,有时我只想共享一串文本(或属性字符串)。对于这些不是文件或 URL 并且永远不会是的项目,我在 UIActivityViewController 中根本没有标题。我本来希望一个短字符串很容易从中创建标题,但逻辑似乎避免这样做。这没关系。我只是想了解它如何/何时从所有可以包含的各种类型的项目中创建标题。奇怪的是,它似乎只对文件/URL 执行此操作。以上是关于UIActivityViewController 的标题是怎么设置的?的主要内容,如果未能解决你的问题,请参考以下文章
UIActivityViewController 共享 UIActivity 未显示
UIActivityViewController 不适用于 WKWebView
限制 UIActivityViewController 共享扩展活动