小编Ale*_*nov的帖子

如果项目没有移动,是否有检查 UICollectionView 项目拖动取消的方法?

我使用拖放来重新排列 collectionView。当我开始拖动时,我更改了 collectionView 可视化。要将它改回来,我需要一个在任何情况下都会执行的方法。现在,如果我开始拖动并立即释放触摸,则不会执行以下任何方法:

not this:
    func collectionView(_ collectionView: UICollectionView,  dragSessionDidEnd session: UIDragSession)

not this:
    func collectionView(_ collectionView: UICollectionView, dropSessionDidEnd session: UIDropSession)

not this:
    func collectionView(_ collectionView: UICollectionView, performDropWith coordinator: UICollectionViewDropCoordinator)
Run Code Online (Sandbox Code Playgroud)

谢谢你。

drag-and-drop uicollectionview swift

7
推荐指数
1
解决办法
2523
查看次数

Codable到CKRecord

我有几个可编码的结构,我想创建一个通用协议,将它们编码为CKRecord for CloudKit并进行解码.

我有一个Encodable的扩展来创建一个字典:

extension Encodable {

    var dictionary: [String: Any] {
        return (try? JSONSerialization.jsonObject(with: JSONEncoder().encode(self), options: .allowFragments)) as? [String: Any] ?? [:]
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在协议扩展中,我将记录创建为属性,如果类型为Data,我尝试创建CKAsset.

var ckEncoded: CKRecord? {

    // Convert self.id to CKRecord.name (CKRecordID)
    guard let idString = self.id?.uuidString else { return nil }
    let record = CKRecord(recordType: Self.entityType.rawValue,
                          recordID: CKRecordID(recordName: idString))

    self.dictionary.forEach {

        if let data = $0.value as? Data {
            if let asset: CKAsset = try? ckAsset(from: data, id: idString) { record[$0.key] = asset }
        } …
Run Code Online (Sandbox Code Playgroud)

dictionary swift cloudkit codable

6
推荐指数
1
解决办法
748
查看次数

将 Core Data 类设置为最终类以满足协议“Self”要求

我编写了一个协议,允许将简单链中的对象与前任和后继链接起来。

我尝试将此协议与我的核心数据实体“事件”一起使用,但出现此错误:

错误:

Protocol 'Chainable' requirement 'chain' cannot be satisfied by a non-final class ('Event') because it uses 'Self' in a non-parameter, non-result type position.
Run Code Online (Sandbox Code Playgroud)

我怎样才能制作这个类final(我不想将 Codegen 设置为手动),或者重写 var chain: [Self]定义?

先感谢您。

extension Event: Chainable {}

protocol Chainable where Self: NSManagedObject {

    var chain: [Self] { get }

    var predecessor: Self? { get set }
    var successor: Self? { get set }

    var selfIndexInChain: Int { get }

    mutating func moveInChain(to index: Int)
    mutating func removeSelfFromChain()

    mutating …
Run Code Online (Sandbox Code Playgroud)

final core-data self swift swift-protocols

5
推荐指数
1
解决办法
391
查看次数

移动时在 UICollectionView 中保持自定义单元格的大小

我有一个水平集合视图,每个单元格都有自己的宽度。我使用默认的 UICollectionViewFlowLayout。重新排列时,单元格继承了它在此移动过程中覆盖的单元格的宽度,这是我不想要的。任何想法,如何避免这种行为?

ios uicollectionview uicollectionviewlayout swift

4
推荐指数
1
解决办法
2335
查看次数

嵌套UITableView动态高度

我需要在 tableView 单元格(实际上,一个单元格中有两个表)中有一个嵌套的 UITableView 来显示具有动态内容的不同列表(因此,我需要动态高度)。我的嵌套表不会滚动\xe2\x80\x94我只需要它们来排序不同类型的元素,如文本、图片、字段等。更清楚地说\xe2\x80\x94第一级是操作级别,每个操作可以具有可变数量的指令和动作。指令和操作应并排放置,操作单元应具有最高表格的大小。

\n\n

嵌套表格没有问题,但我遇到了自动布局的问题。我\xe2\x80\x99已经尝试了我能找到的一切,但没有成功。

\n\n

我尝试了嵌套表视图的高度约束,我根据 tableview.contentsize.hight 创建操作单元格进行更新,但 contentsize 似乎根据每行的估计大小而不是实际大小返回高度。

\n\n

我尝试重写嵌套表的内在内容大小:

\n\n
UITableView {\n\n    override var contentSize:CGSize {\n        didSet {\n            self.invalidateIntrinsicContentSize()\n        }\n    }\n\n    override var intrinsicContentSize: CGSize {\n        self.layoutIfNeeded()\n        return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height)\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

没有什么能正常工作。有什么想法可以解决吗?

\n\n

先感谢您。

\n

uitableview autolayout swift

4
推荐指数
1
解决办法
4950
查看次数