i have app retrieves ipv4 , ipv6 addresses , of now, addresses run in uitableview. how list them on different lines? below code.
import uikit import foundation class viewcontroller: uiviewcontroller, uitableviewdelegate, uitableviewdatasource{ @iboutlet weak var tableview: uitableview! func getifaddresses() -> [string] { var addresses = [string]() // list of interfaces on local machine: var ifaddr : unsafemutablepointer<ifaddrs> = nil if getifaddrs(&ifaddr) == 0 { // each interface ... (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) { let flags = int32(ptr.memory.ifa_flags) var addr = ptr.memory.ifa_addr.memory // check running ipv4, ipv6 interfaces. skip loopback interface. if (flags & (iff_up|iff_running|iff_loopback)) == (iff_up|iff_running) { if addr.sa_family == uint8(af_inet) || addr.sa_family == uint8(af_inet6) { // convert interface address human readable string: var hostname = [cchar](count: int(ni_maxhost), repeatedvalue: 0) if (getnameinfo(&addr, socklen_t(addr.sa_len), &hostname, socklen_t(hostname.count), nil, socklen_t(0), ni_numerichost) == 0) { if let address = string.fromcstring(hostname) { addresses.append(address) } } } } } freeifaddrs(ifaddr) } return addresses } func numberofsectionsintableview(tableview: uitableview) -> int { return 1 } func tableview(tableview: uitableview, numberofrowsinsection section: int) -> int { return 1 } func tableview(tableview: uitableview, cellforrowatindexpath indexpath: nsindexpath) -> uitableviewcell { var cell = uitableviewcell() cell.textlabel?.linebreakmode = nslinebreakmode.bywordwrapping cell.textlabel?.numberoflines = 0 cell.textlabel?.text = self.getifaddresses()[indexpath.row] cell.textlabel?.text = getifaddresses().description return cell }
with
func numberofsectionsintableview(tableview: uitableview) -> int { return 1 } func tableview(tableview: uitableview, numberofrowsinsection section: int) -> int { return 1 } you have defined table view has 1 section 1 single row, ,
cell.textlabel?.text = getifaddresses().description puts entire array (as string) text label of single row.
what should call getifaddresses() once , save result in property:
var addresses : [string] = [] override func viewdidload() { super.viewdidload() addresses = getifaddresses() } then define table view 1 section , many rows have addresses:
func numberofsectionsintableview(tableview: uitableview) -> int { return 1 } func tableview(tableview: uitableview, numberofrowsinsection section: int) -> int { return addresses.count } finally, fill each row corresponding address array:
func tableview(tableview: uitableview, cellforrowatindexpath indexpath: nsindexpath) -> uitableviewcell { let cell = uitableviewcell() // or better (requires have prototype cell registered): // let cell = self.tableview.dequeuereusablecellwithidentifier("cell", forindexpath: indexpath) as! uitableviewcell cell.textlabel?.text = addresses[indexpath.row] return cell }
Comments
Post a Comment