草庐IT

ios - 在 TableView 中按下时更新 UISwitch 的状态

coder 2023-09-10 原文

我有一个 iOS 应用程序需要远程打开/关闭灯。该应用程序从 parse.com 获取灯光数据,并构建一个表格 View ,其中每个单元格显示灯光名称和 UISwitch。我想知道当我打开或关闭其中一盏灯时如何更改存储在 parse.com 上的 bool 值。问题是开关使用的 IBAction 不是 bool 值,我不能写,如果更新灯值的语句是按下开关。我在我的单元格类中创建了 IBaction,并希望它可以被 tableviewcontroller 类使用。

这是我的 tableviewcontroller 类的一部分

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell:RelayCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as RelayCell

    let label:PFObject = self.labelArray.objectAtIndex(indexPath.row) as PFObject //create the object label

    cell.relayTextField.text = label.objectForKey("text") as String //put the text in the labeltextField

    if (label.objectForKey("switch") as NSObject == 1) {
        //cell.mySwitch = true    //turn the switch on depending on the boolean value in switchColumn
        cell.mySwitch.setOn(true, animated: true)
    }
    else{
        //cell.mySwitch = false    //turn the switch on depending on the boolean value in switchColumn
        cell.mySwitch.setOn(false, animated: true)
    }
    return cell
}

这段代码显示了每个独立开关的状态,但是,我现在想要的是能够按下应用程序上的每个独立按钮并更改在线数据库中的值。

你能帮我解决一下吗,因为我没有在网上找到任何东西。

class RelayCell: UITableViewCell {

@IBOutlet weak var mySwitch: UISwitch!
@IBOutlet weak var relayTextField: UITextField!


override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
   relayTextField.layer.borderColor = UIColor.blackColor().CGColor
   relayTextField.layer.borderWidth = 0.8
   relayTextField.layer.cornerRadius = 10
}

  override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    // Configure the view for the selected state
}

 @IBAction func switchChangedState(sender: UISwitch) {
 }

}

这是我的 RelayCell 类,由 tableViewController 类中的 tableView 方法使用。

最佳答案

处理此问题的一种方法是向 RelayCell 添加回调属性并从 switchChangedState 调用回调:

class RelayCell: UITableViewCell {

    typealias SwitchCallback = (Bool) -> Void
    var switchCallback: SwitchCallback?

    @IBAction func switchChangedState(sender: UISwitch) {
        switchCallback?(sender.on)
    }

    // ... rest of RelayCell
}

在您的 tableView:cellForRowAtIndexPath: 方法中,设置单元格的回调:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell:RelayCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as RelayCell

    cell.switchCallback = { [weak self] (switchIsOn) in
        self?.setSwitchValue(switchIsOn, forRowAtIndexPath:indexPath)
        Void()
    }

    // ... rest of tableView:cellForRowAtIndexPath:
    return cell
}

然后您可以在 setSwitchValue:forRowAtIndexPath: 中执行任何您需要的操作,这是您添加到 TableView Controller 类中的方法:

private func setSwitchValue(switchIsOn: Bool, forRowAtIndexPath indexPath: NSIndexPath) {
    println("row \(indexPath.row) switch on-ness is now \(switchIsOn)")
}

关于ios - 在 TableView 中按下时更新 UISwitch 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28484559/

有关ios - 在 TableView 中按下时更新 UISwitch 的状态的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  4. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  7. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  8. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  9. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  10. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

随机推荐