标签: swift4

更改 tableView 中单元格的 editStyle 背景颜色和标签

我有一个表格视图,我试图在其中实现滑动删除操作。

我正在使用 swift 4 和 Xcode 9。

到目前为止,我有下一个代码,它允许我在滑动时显示删除标签:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    switch editingStyle {
    case .delete:
        print("deleting row")

    default:
        return
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,现在我想将背景红色更改为另一种颜色,如果可能的话我想显示一个图标而不是标签。

我正在尝试在 Swift 4 中看到的这段代码,但在创建按钮时它会抱怨:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let deleteButton = UITableViewRowAction(style: .default, title: "Delete") { (action, indexPath) in
        self.tableView.dataSource?.tableView!(self.tableView, commit: .delete, forRowAt: indexPath)
        return
    }
    deleteButton.backgroundColor = UIColor.black
    return [deleteButton]
}
Run Code Online (Sandbox Code Playgroud)

它给出了此错误 -> 对成员 'tableView(_:numberOfRowsInSection:)' 的引用不明确

我不知道我是否正在尝试编辑的好方法,或者它是否在 swift 4 上根本不可编辑。

任何帮助表示赞赏,

谢谢!

cell tableview swift swift4

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

更改 Swift 4 中 UISearchBar 的字体

我讨厌苹果从 Swift 3.1 到 Swift 4 的所有变化。现在我又面临另一个困境。我能够自定义搜索栏,但现在我需要更改输入文本和占位符的来源。

在此输入图像描述

我已经感动了天地,但我找不到改变字体的解决方案。我还想将搜索图标更改为自定义图标。

swift4 ios11

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

你能告诉 for 循环有条件地前进不止一步吗?

考虑以下代码:

let value = "ABCDE"

for letter in value {
    print(letter)
}
Run Code Online (Sandbox Code Playgroud)

这打印:

A
B
C
D
E
Run Code Online (Sandbox Code Playgroud)

现在考虑假设的代码,当它找到“2”时,它会在循环中向前跳过 2。这是显示我要问的内容的伪代码......

let value = "AB2DE"

for letter in value {

    if letter == "2" {
        continue 2 <-- Does Swift support something similar to this?
    }

    print(letter)
}
Run Code Online (Sandbox Code Playgroud)

上面的输出看起来像这样:

A
B
E
Run Code Online (Sandbox Code Playgroud)

注意:当然,我可以通过管理跳过计数器轻松实现此目的,然后使用continue,在进行时递减计数器,或者,如果源支持下标,正如其他人建议的那样,我可以使用循环while来管理自己的索引。有多种方法可以解决这个假设的问题,但这不是我问题的目的。

我的问题是专门查明该语言是否原生支持一次跳过 for 循环的多次迭代(例如类似continueManyor的东西continue x)。

for-loop continue swift swift4

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

Swift 4:如何让键盘始终出现且永不消失?

问题:我想知道怎样才能让键盘始终停留在页面上而不消失?

到目前为止,这是我的代码:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    textField1?.becomeFirstResponder()
    numberKeyPadPopUp()
    textField1.delegate = self

}
Run Code Online (Sandbox Code Playgroud)

uitextfield ios swift swift4

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

AVAssetImageGenerator.generateCGImagesAsynchronously 的不正确帧

根据文档,generateCGImagesAsynchronously接收NSValue视频和给定时间的数组并生成帧,并将其作为回调返回。

我使用以下代码生成值列表

    var values : [NSValue] = []
    let frameDuration = CMTimeMake(1, timeScale)
    for i in 0..<duration{
        let lastFrameTime = CMTimeMake(Int64(i), timeScale)
        let presentationTime = (i == 0) ? lastFrameTime : CMTimeAdd(lastFrameTime, frameDuration)

        values.append(NSValue(time: presentationTime))

        //Next two lines of codes are just to cross check the output
        let image = try! imageGenerator.copyCGImage(at: presentationTime, actualTime: nil)
        let imageUrl = FileManagerUtil.getTempFileName(parentFolder: FrameExtractor.EXTRACTED_IMAGE, fileNameWithExtension: "\(Constants.FRAME_SUFFIX)\(i)\(".jpeg")")
    }
Run Code Online (Sandbox Code Playgroud)

正如您在上面的代码中看到的,我使用同步方法交叉检查了结果,我可以确认数组values保存了正确的时间参考。

但是,当将相同的数组传递给generateImageAsynchronously方法时,对于不同的时间戳,我会得到相同帧的重复 10 次。也就是说,如果我的视频时长 10 秒,那么我会得到 300 帧(30 fps),但第一秒的帧每个重复 …

avfoundation ios avassetimagegenerator swift4

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

如何在 Swift 4 中使用 CAShapeLayer 和 BezierPath 绘制曲线?

我想知道如何在 Swift 4 中使用 CAShapeLayer 和 BezierPath 给定两个点(A 点和 B 点)渲染一条如下图所示的曲线?

func drawCurvedLine(start: CGPoint, end: CGPoint) {
   //insert code here
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

core-graphics cashapelayer ios uibezierpath swift4

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

快速离线下载 YouTube 视频

我正在尝试在手机上下载 YouTube 视频,以便用户稍后可以离线播放。我在用户可以下载的地方添加了一个按钮。我当前如何下载视频的代码如下。

@objc func downloadSelectedVideo() {
        if let audioUrl = URL(string: "http://freetone.org/ring/stan/iPhone_5-Alarm.mp3") {
            // create your document folder url
            let documentsUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
            // your destination file url
            let destination = documentsUrl.appendingPathComponent(audioUrl.lastPathComponent)
            print(destination)
            // check if it exists before downloading it
            if FileManager().fileExists(atPath: destination.path) {
                print("The file already exists at path")
            } else {
                //  if the file doesn't exist
                //  just download the data from your url
                URLSession.shared.downloadTask(with: audioUrl, completionHandler: …
Run Code Online (Sandbox Code Playgroud)

youtube ios swift swift4

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

Swift:从 avaudioplayer 中的 url 下载后无法播放音频文件

我想从 url 播放音频文件。我想在 swift4 和 xcode 9 中使用 avaudioplayer 来播放这个。所以,首先我在会话中下载这个并播放该音频。但有时 avaudioplayer 无法播放音频并显示错误。

\n\n

代码:

\n\n
func downloadFileFromURL(url: URL){\n\n    var downloadTask:URLSessionDownloadTask\n    downloadTask = URLSession.shared.downloadTask(with: url, completionHandler: { [weak self](URL, response, error) -> Void in\n\n        print("audio download response: \\(String(describing: response))")\n\n       SVProgressHUD.dismiss()\n\n        if response != nil {\n\n            if error != nil {\n\n                print("audio file download error: \\(String(describing: error))")\n\n                return\n            }\n\n            DispatchQueue.main.async {\n\n                self?.play(url: URL!)\n            }\n\n        } else {\n\n            SVProgressHUD.dismiss()\n            Config.shared.show_simple_alert(title: "Fail", message: "Sorry, Fail to play this music. Plase try another or later", …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift3 swift4 xcode9

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

在 Swift 4 中将字典解码为数组

我的数据结构如下所示。“人类”是一个键的字典,其值是人类的字典:

  "humans" : {
    "abc123" : {
      "name" : "Vince",
      "pets" : [ {
        "animal" : "dog",
        "name" : "Clifford"
      }, {
        "animal" : "fish",
        "name" : "Nemo"
      } ]
    },
    "xyz789" : {
      "name" : "Jack"
    }
  }
Run Code Online (Sandbox Code Playgroud)

所以我的 Swift 结构看起来像这样来匹配它:

struct Human: Codable {
    var name: String!
    var pets: [Pet]?
}

struct Pet: Codable {
    var name: String!
    var animal: Animal!
}

enum Animal: String, Codable {
    case cat
    case dog
    case fish
}
Run Code Online (Sandbox Code Playgroud)

我尝试像这样解码(使用CodableFirebase库):

let …
Run Code Online (Sandbox Code Playgroud)

firebase firebase-realtime-database swift4 codable

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

将动画添加到以编程方式创建的 UIview

我正在尝试构建一个 UILabel。

但我想在这个标签弹出时制作动画

我应该在哪里为标签设置动画?

这是我的代码

static func setupView(view: UIView){
       let networkStatusView = UILabel(frame: CGRect(x: 0, y: 40, width: view.bounds.width, height:50))
        networkStatusView.tag = 20
        networkStatusView.text = "offline"
        networkStatusView.font = UIFont.boldSystemFont(ofSize: 18)
        networkStatusView.translatesAutoresizingMaskIntoConstraints = false
        networkStatusView.textAlignment = .center
        networkStatusView.backgroundColor=UIColor.green
        networkStatusView.layer.borderColor = UIColor.white.cgColor

        UIView.animate(withDuration: 0.5) {
        view.addSubview(networkStatusView)
        }
        view.layoutIfNeeded()    
    }
Run Code Online (Sandbox Code Playgroud)

uilabel ios swift4

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