Post

Replies

Boosts

Views

Activity

How to customize UIActivityViewController
We are currently developing an enterprise iOS application and are in the process of implementing Data Leakage Protection (DLP) features. As part of this effort, we need to control the available actions and target applications presented within the UIActivityViewController. Specifically, we would like to programmatically filter or restrict certain activities and destination apps shown in the share sheet based on user-specific permissions. These permissions will be dynamically evaluated and updated at runtime. This type of functionality is supported by the Microsoft Intune SDK. However, our objective is to implement this behavior natively within our application without relying on any third-party libraries. Could you please advise on the recommended approach or available APIs to achieve this level of control over the UIActivityViewController?
4
0
252
Jul ’25
TableView scrolling to top after applying UITableViewDiffableDataSource snapshot
I'm doing pagination using UITableViewDataSourcePrefetching. The values will be taken from the Realm local storage. I will get an array of objects. These values will be applied to the existing UITableViewDiffableDataSource datasource. After applying snapshot the tableview scrolling to the top. I have verified that all my ChatMessage objects has unique hashValues. How can I prevent the scrolling? Link to the video sample [https://streamable.com/72g1j1) Given my code snippet private func appendLocal(chats chatMessages: [ChatMessage]) { var sections: [String] = chatMessages.map({ $0.chatDateTime.toString() }) sections.removeDuplicates() guard !sections.isEmpty else { return } var snapshot = dataSource.snapshot() let chatSections = snapshot.sectionIdentifiers sections.forEach { section in let messages = chatMessages.filter({ $0.chatDateTime.toString() == section }) /// Checking the section is already exists in the dataSource if let index = chatSections.firstIndex(of: section) { let indexPath = IndexPath(row: 0, section: index) /// Checking dataSource already have some messages inside the same section /// If messages available then add the recieved messages to the top of existing messages /// else only section is available so append all the messages to the section if let item = dataSource.itemIdentifier(for: indexPath) { snapshot.insertItems(messages, beforeItem: item) } else { snapshot.appendItems(messages, toSection: section) } } else if let firstSection = chatSections.first { /// Newly receieved message's section not available in the dataSource /// Add the section before existing section /// Add the messages to the newly created section snapshot.insertSections([section], beforeSection: firstSection) snapshot.appendItems(messages, toSection: section) } else { /// There is no messages available append the new section and messages snapshot.appendSections([section]) snapshot.appendItems(messages, toSection: section) } } dataSource.apply(snapshot, animatingDifferences: false) }
0
0
865
Dec ’21