jjzjj

ios - Swift - 在动态 TableCell 上继续

coder 2023-09-07 原文

我正在快速学习,并且在尝试在触摸 TableViewCell 时触发 segue 时遇到问题,这应该将 url 传递给第二个 View ,目前只是在标签中显示它。 我动态创建(我见过人们以编程方式使用,这可能是正确的词)每个单元格,所以,在 Storyboard 中,除了 View 本身之外,我没有任何对象可以链接到另一个 View ......这就是我做到了。 所以我将第一个 View Controller 连接到第二个 View Controller ,并添加了执行转场的代码。

我不确定这是否正确,我的知识来自教程,但并未完全解释我想做什么。

下面是两个 View 的代码。

第一眼

    import UIKit

protocol sendInfoDelegate{

    func userDidEnterInfo( WhichInfo info : String)

}

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var tableData = []
@IBOutlet weak var redditListTableView: UITableView!
var selectedCellURL : String?
var delegate : sendInfoDelegate? = nil



override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    // change the link to change the json source

    getRedditJSON("http://www.reddit.com/.json")
}

//
//Creates a connection via a task (networktask) then parses the json
//
func getRedditJSON(whichReddit : String){
    let mySession = NSURLSession.sharedSession()
    let url: NSURL = NSURL(string: whichReddit)
    let networkTask = mySession.dataTaskWithURL(url, completionHandler : {data, response, error -> Void in
        var err: NSError?
        var theJSON = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSMutableDictionary
        let results : NSArray = theJSON["data"]!["children"] as NSArray
        dispatch_async(dispatch_get_main_queue(), {
            self.tableData = results
            self.redditListTableView.reloadData()
        })
    })
    networkTask.resume()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

//needs to be implemented

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return tableData.count
}

//creates the whole table

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")
    let redditEntry : NSMutableDictionary = self.tableData[indexPath.row] as NSMutableDictionary
    cell.textLabel?.text = redditEntry["data"]!["title"] as? String
    cell.detailTextLabel?.text = redditEntry["data"]!["author"] as? String
    return cell
}

// action to be taken when a cell is selected
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let redditEntry : NSMutableDictionary = self.tableData[indexPath.row] as NSMutableDictionary
    self.selectedCellURL = redditEntry["data"]!["url"] as? String
    self.performSegueWithIdentifier("passInfo" , sender: indexPath)
    println(self.selectedCellURL!)

    if delegate != nil {
        let information:String = self.selectedCellURL!
        println("ciao")
        delegate?.userDidEnterInfo(WhichInfo: information)
        self.navigationController?.popViewControllerAnimated(true)

    }

第二个观点

import UIKit




class WebPageController : UIViewController, sendInfoDelegate {


    var infoFromSVC: String?

    @IBOutlet weak var labelVC: UILabel!


    func userDidEnterInfo(WhichInfo info: String) {
        self.infoFromSVC = info
        labelVC.text = infoFromSVC

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "passInfo"{
            let firstVController : ViewController = segue.destinationViewController as ViewController
            firstVController.delegate = self

        }
    }
}

谢谢。

最佳答案

要将任何数据传递给第二个 View Controller ,您需要在第一个 View Controller 中实现 prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 方法,并在此处将任何数据传递给第二个 View Controller segue.destinationViewController 对象。

例如

// this method must be in first view controller
 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "passInfo" {
            var secondViewController : SecondViewController = segue.destinationViewController as SecondViewController

            var indexPath = self.tableview.indexPathForSelectedRow() //get index of data for selected row      

           secondViewController.data = self.dataArray.objectAtIndex(indexPath.row) // get data by index and pass it to second view controller

        }
    }

在第二个 View Controller 中获取数据的代码

override func viewDidLoad() {
    super.viewDidLoad()

    self.label.text = self.data
}

数据变量必须定义为第二个 View Controller 的属性。

关于ios - Swift - 在动态 TableCell 上继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303616/

有关ios - Swift - 在动态 TableCell 上继续的更多相关文章

  1. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  2. 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返回它复制的字节数,但是当我还没有下

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

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

  4. ruby - 继续,未定义 callcc 方法 - 2

    我想学习一些关于Continuation的知识,使用callcc方法从一些文章中键入几个示例,但我遇到了错误:NoMethodError:undefinedmethod`callcc'formain:Objectfrom(pry):2:in`'没有文章提到包含延续库。那么如何解决这个问题呢?谢谢编辑:ruby1.9.2p290(2011-07-09修订版32553)[x86_64-linux] 最佳答案 您需要要求“继续”。require'continuation' 关于ruby-继续,

  5. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

  6. 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使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  7. ruby - 在 Ruby 中动态创建数组 - 2

    有没有办法在Ruby中动态创建数组?例如,假设我想遍历用户输入的书籍数组:books=gets.chomp用户输入:"TheGreatGatsby,CrimeandPunishment,Dracula,Fahrenheit451,PrideandPrejudice,SenseandSensibility,Slaughterhouse-Five,TheAdventuresofHuckleberryFinn"我把它变成一个数组:books_array=books.split(",")现在,对于用户输入的每一本书,我想用Ruby创建一个数组。伪代码来做到这一点:x=0books_array.

  8. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

  9. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  10. ruby-on-rails - carrierwave:在序列化动态属性上安装 uploader - 2

    首先,我使用的是rails3.1.3和来自master的carrierwavegithub仓库的分支。我使用after_init钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:classPage省略mount_uploader命令让我可以访问我想要的属性。但是当我安装uploader时出现错误消息说“nil类的未定义新方法”我在源代码中读到有方法read_uploader和扩展模块中的write_uploader。我如何必须覆盖这些来制作mount_uploader命令使用我的“虚拟

随机推荐