我有一个表格视图,我试图在其中实现滑动删除操作。
我正在使用 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 上根本不可编辑。
任何帮助表示赞赏,
谢谢!
我讨厌苹果从 Swift 3.1 到 Swift 4 的所有变化。现在我又面临另一个困境。我能够自定义搜索栏,但现在我需要更改输入文本和占位符的来源。
我已经感动了天地,但我找不到改变字体的解决方案。我还想将搜索图标更改为自定义图标。
考虑以下代码:
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)。
问题:我想知道怎样才能让键盘始终停留在页面上而不消失?
到目前为止,这是我的代码:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
textField1?.becomeFirstResponder()
numberKeyPadPopUp()
textField1.delegate = self
}
Run Code Online (Sandbox Code Playgroud) 根据文档,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),但第一秒的帧每个重复 …
我想知道如何在 Swift 4 中使用 CAShapeLayer 和 BezierPath 给定两个点(A 点和 B 点)渲染一条如下图所示的曲线?
func drawCurvedLine(start: CGPoint, end: CGPoint) {
//insert code here
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在手机上下载 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) 我想从 url 播放音频文件。我想在 swift4 和 xcode 9 中使用 avaudioplayer 来播放这个。所以,首先我在会话中下载这个并播放该音频。但有时 avaudioplayer 无法播放音频并显示错误。
\n\n代码:
\n\nfunc 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) 我的数据结构如下所示。“人类”是一个键的字典,其值是人类的字典:
"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) 我正在尝试构建一个 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) swift4 ×10
ios ×6
swift ×4
avfoundation ×1
cashapelayer ×1
cell ×1
codable ×1
continue ×1
firebase ×1
for-loop ×1
ios11 ×1
swift3 ×1
tableview ×1
uibezierpath ×1
uilabel ×1
uitextfield ×1
xcode ×1
xcode9 ×1
youtube ×1