จะโทรไปที่ไหนเพื่อเตรียมพร้อมสำหรับการทำต่อในมุมมองตาราง

สวัสดี ฉันกำลังทำงานกับแอปพลิเคชันที่โพสต์ตำแหน่ง 50 ตำแหน่งใน tableView แบบไดนามิก และเมื่อคุณคลิกที่ตำแหน่ง มันจะแยกไปยังตัวควบคุม tableView ใหม่และโพสต์รูปภาพ 50 รูปจากตำแหน่งนั้น ฉันสร้าง tableViewController แล้วสร้างไฟล์ใหม่ซึ่งมีไฟล์ทั้งหมดที่ tableView ต้องใช้ IE Cellforrowatindexpath ฉันมีการเชื่อมต่อต่อจาก tableViewcontroller หลัก แต่ข้อมูลทั้งหมดจะถูกเก็บไว้ในไฟล์ใหม่ซึ่งมีวิธีการที่ tableViewController ใช้ ฉันจะเขียน PreparForSegue ใน tableViewController หรือฉันจะเขียนมันลงในไฟล์ซึ่งมีวิธีการสร้างตารางหรือไม่? ถ้าฉันเขียนมันใน tableViewCOntroller ฉันจะเข้าถึงชื่อเซลล์ของเซลล์ใดเซลล์หนึ่งที่สร้างขึ้นแบบไดนามิกได้อย่างไร ขอบคุณ.

 -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"Photos for location"]){
//I dont know what to use for the name
        [segue.destinationViewController setPhotoInPlace: WHAT DO I CALL THIS!?
    }
}

ชื่อการโทรมาจากไฟล์อื่นที่ใช้ API สาธารณะเพื่อสร้างอาร์เรย์ของพจนานุกรมซึ่งมีข้อมูลเช่นชื่อและที่ตั้ง ไฟล์นี้มีชื่อว่า FlickerFetcher นี่คือโค้ดที่สร้างเซลล์แบบไดนามิก self.brain เป็นตัวอย่างของ flickerFetcher และ topPlaces เป็นวิธีการที่เรียกจาก flickrFetcher เพื่อรับ NSArray ของ NSdictionaries

      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath
{
// Create an instance of the cell
UITableViewCell *cell;
cell = [self.tableView dequeueReusableCellWithIdentifier:@"Photo Description"];

if(!cell)
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Photo Description"];
// set properties on the cell to prepare if for displaying   
//top places returns an array of NSDictionairy objects, must get object at index and then object for key

// the cellTitle has country then province, country goes in main title and province will go as subtitle.
NSString * cellTitle = [[[[self.brain class] topPlaces] objectAtIndex:self.location] objectForKey:@"_content"]; 

NSRange cellRange = [cellTitle rangeOfString:@","];

NSString * cellMainTitle = [cellTitle substringToIndex:cellRange.location];

cell.textLabel.text = cellMainTitle;

NSString* cellSubtitle = [cellTitle substringFromIndex:cellRange.location +2];

cell.detailTextLabel.text =  cellSubtitle;
//location is an int property that allows a new selection when using objectAtIndex
self.location++;
return cell;
}

person Terrel Gibson    schedule 02.08.2012    source แหล่งที่มา


คำตอบ (1)


prepareForSegue: เป็นวิธีการ UIViewController ดังนั้นจึงจำเป็นต้องอยู่ในตัวควบคุมมุมมองของคุณ พารามิเตอร์ sender ควรเป็นเซลล์ของคุณที่ทำให้เกิดการดำเนินการต่อ คุณสามารถใช้วิธีมุมมองตาราง indexPathForCell: เพื่อรับเส้นทางดัชนีที่เกี่ยวข้อง และนั่นควรจะเพียงพอที่จะค้นหาข้อมูลเดียวกันกับที่คุณใส่ลงในเซลล์เมื่อคุณใช้ cellForRowAtIndexPath:

(ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดย "ไฟล์ใหม่" หรือคลาสที่นำไปใช้ ดังนั้นฉันจึงไม่สามารถพูดได้ว่ามันส่งผลกระทบอะไรหรือไม่)

person Phillip Mills    schedule 02.08.2012
comment
โดยไฟล์ใหม่ฉันหมายถึงฉันสร้างคลาสย่อยของมัน - person Terrel Gibson; 03.08.2012
comment
ตกลง หากเป็นคลาสย่อยนั่นหมายความว่ามันเป็น UIViewController ด้วย ดังนั้นไม่ว่าคุณจะใส่เมธอดนี้ไว้ในพาเรนต์หรือคลาสย่อยก็ไม่ควรสร้างความแตกต่างในการทำงาน เด็กอาจให้สิทธิ์ในการเข้าถึงข้อมูลที่คุณต้องการส่งไปยังคอนโทรลเลอร์ใหม่ได้ดีขึ้น...ฉันเดานะ - person Phillip Mills; 03.08.2012
comment
เมื่อฉันใส่preparforsegueในพาเรนต์แล้วเขียน NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; ฉันได้รับข้อผิดพลาดแจ้งว่าไม่ได้ประกาศ tableview แต่เมื่อสิ่งนี้อยู่ในเด็ก ข้อผิดพลาดนี้ก็จะหมดไป ฉันจะได้รับชื่อการโทรได้อย่างไรหากเส้นทางดัชนีส่งคืนเฉพาะแถวและส่วนเท่านั้น - person Terrel Gibson; 03.08.2012
comment
และฉันคิดว่า UITableViewController ไม่ใช่ UIViewController - person Terrel Gibson; 03.08.2012
comment
(A UITableViewController ก็คือ UIViewController เช่นกัน) สมมุติว่าคุณใช้แถวและส่วนเพื่อใส่ข้อมูลลงในเซลล์ ฉันคิดว่านั่นคือสิ่งที่คุณต้องส่งผ่านไปยังคอนโทรลเลอร์ใหม่ ถ้าไม่เช่นนั้น คุณอาจอธิบายได้ว่าชื่อเซลล์มาจากไหน - person Phillip Mills; 03.08.2012
comment
ไม่รู้เรื่องนั้น ฉันได้เพิ่มโค้ดสำหรับวิธีสร้างเซลล์แล้ว หวังว่านี่จะช่วยได้ - person Terrel Gibson; 03.08.2012
comment
และเหตุใด self.tableView จึงถูกประกาศในไฟล์คลาสย่อยเท่านั้น - person Terrel Gibson; 03.08.2012
comment
ฉันสงสัยว่าคุณจะดีกว่าถ้าคุณตั้งค่า topPlaces เพื่อให้คุณสามารถจัดทำดัชนีโดยใช้แถวของเส้นทางดัชนี ฉันกังวลว่าสิ่งที่คุณมีจะผิดพลาดและ/หรือให้ผลลัพธ์ที่ไม่ดีหากคุณเลื่อนดูบ่อยๆ (สำหรับ self.tableView ควรมีอยู่ใน UITableViewController หรือหนึ่งในคลาสย่อย) - person Phillip Mills; 03.08.2012