ใช้ Split View ใน iPad

13 comments:

  1. ขอบคุณสำหรับบทความดีๆค่ะ
    มีเรื่องรบกวนถามค่ะ
    พี่ค่ะ ถ้าทำปุ่ม popover view ที่ให้โชว์ตอน หมุนเครื่องเป็นแนวนอน ปุ่มจะหาย ถ้าเป็นแนวตั้ง ปุ่มก็จะโชว์ คือ ถ้าเราสร้าง ViewController ขึ้นมาอีก ViewController
    โดยให้คลิกหน้า หน้า DetailViewController เพื่อเปลี่ยน ViewController พอเปลียน ตรงnavigation ก็จะมีปุ่ม back ค่ะ คือว่าจะถามว่าเราสามารถ ทำให้ปุ่ม popover view ขึ้นในหน้านี้ด้วยได้ไหมค่ะ
    อธิบายแล้วงงๆ ไหมหว่าา

    ReplyDelete
  2. งงครับ :p แต่ถ้าเข้าใจไม่ผิด ทำได้ครับ เราเอา popover ไปวางไว้ตรงไหนก็ได้ครับ concept ของมันคือต้องกำหนดจุดอิงของมันด้วย แล้วมันจะโผล่ออกมาให้เราโดยอิงจากจุดที่เรากำหนดให้เองครับ

    ถึงตอนนี้คุณ pondly คงทำได้แล้วมั้งครับ ฮาๆ นานไปหน่อย

    ReplyDelete
  3. ขอบคุณสำหรับวิธีดีๆครับ
    นอกเรื่องนิดนึงครับ ผมอยากใส่ MKMapView ในหน้า Detail อ่ะครับ ตอนทำใน iphone ก็ปกติดีครับ แต่พอมาทำใน ipad มัน error อ่ะครับ อยากทราบว่าทำไม รบกวนหน่อยได้ไม๊ครับ
    ขอบคุณล่วงหน้าครับ

    ReplyDelete
  4. มัน error ว่าอะไรบ้างครับ ลองดู console แล้วบอกมาได้ไหมครับ?

    ReplyDelete
  5. ก่อนอื่นขอบคุณที่ตอบไวมากๆครับ
    ***Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeObjecrForKey:]: cannot decode ovject of class (MKMapView)'
    *** Call stack at first throw

    ผมใช้ xcode4 นะครับ
    ซึ่งวิธีที่ผมทำก็คือ ลากMapView ลงไปในหน้า Xib โยง mapView ไปที่หน้า mapViewController.h ครับ ให้มัน @property ให้เองอัตโนมัติ จากนั้นหน้า mapView ก็ควรจะแสดงใช่ไม๊ครับ แต่พอ run แล้ว SIGABRT ครับ (ผมทำตรงไหนผิดรึเปล่าครับ)
    และหากลบmapView ออกจาหน้า xib แล้ว ก็จะไม่มีปัญหาครับ
    ขอบคุณครับ

    ReplyDelete
  6. link กับ MapKit Framework หรือยังครับ?

    ReplyDelete
  7. ผม link mapkit.framework ผิดวิธีครับ ตอนนี้ได้แล้วครับ
    ปล.ผมพึ่งเริ่มเขียนมาได้ซักเดือนนึงครับ ยังไม่ค่อยเก่งขอโทษที่ทำให้เสียเวลาครับ
    ปล2.เว็ปนี้ดีมากครับ จะตามดู tips ต่อๆไปนะครับ ขอบคุณมากครับ

    ReplyDelete
  8. สู้ๆ ครับ ยินดีตอบคำถาม และขอบคุณมากเช่นกันครับ :)

    ReplyDelete
  9. พี่ครับ ถ้าพอมีเวลาว่างก็ขอรบกวนด้วยครับ
    คือผมทำ Map อยู่ตอนนี้ ในPopover ของผมมี 7-Eleven อยู่ครับ แล้วทีนี้ผมต้องการให้กดที่ roll นั้น แล้วหน้า DetailViewController refresh ใหม่ โดยมีหมุดมาปักในตำแหน่งที่กำหนดไว้

    ปัญหาตอนนี้คือ พอกดroll ใน table แล้ว หมุดไม่ปัก และผมก็ไม่ทราบวิธีการ refresh mapview ใหม่ด้วยครับ
    ยังไงก็รบกวนด้วยครับ ขอบคุณครับ

    ReplyDelete
  10. ให้ฝึกทำตามอันนี้ครับ http://www.raywenderlich.com/2847/introduction-to-mapkit-on-ios-tutorial

    ถ้าอ้างอิงจาก tutorial ใน link ที่ผมให้ไปจะทำได้แบบนี้ครับ

    1. remove annotation ทุกๆ อันบน Map ออกไปก่อน
    for (id annotation in _mapView.annotations) {
    [_mapView removeAnnotation:annotation];
    }

    2. จากนั้นวนลูปแปะ Annotation ลงบน Map ใหม่ครับ
    for (NSArray * row in data) {
    NSNumber * latitude = [row objectAtIndex:11];
    NSNumber * longitude = [row objectAtIndex:12];
    NSString * crime = [row objectAtIndex:16];
    NSString * address = [row objectAtIndex:15];

    CLLocationCoordinate2D coordinate;
    coordinate.latitude = latitude.doubleValue;
    coordinate.longitude = longitude.doubleValue;
    MyLocation *annotation = [[[MyLocation alloc] initWithName:crime address:address coordinate:coordinate] autorelease];
    [_mapView addAnnotation:annotation];
    }


    ลองเอาไปปรับใช้ดูครับ :)

    ReplyDelete
  11. ขอบคุณมากครับ ตอนนี้ผมสามารถปักหมุดลงไปในจุดที่ต้องการได้แล้ว แต่ยังจำเป็นต้องกดปุ่ม refresh อยู่ครับ คือใน tutorial ที่พี่ให้มาเป็น iphone ใช่มั๊ยครับ ทีนี้การที่จะสั่งงานจาก master pane ให้ Detail pane มีการเปลี่ยนแปลงผมยังทำไม่ได้ครับ ที่ผมทำได้ตอนนี้คือ ในmaster pane ที่เป็น table พอกด roll ก็ให้ set latitude longitude ใหม่ จากนั้น กลับมากดปุ่มปักหมุดที่หน้า detailview ใหม่ครับ ผมอยากได้แบบกดปุ๊บ detail view มีหมุดมาปักปั๊ปเลยอ่ะครับ ไม่ทราบว่าทำได้รึเปล่า ยังไงก็รบกวนด้วยนะครับ ขอบคุณมากครับ

    ReplyDelete
  12. ได้แล้วครับ ขอบคุณมากครับ
    ที่ได้เพราะว่า ตอนแรก ใช้ DetailViewController *dTVC = [[DetailViewController alloc] init];

    แล้วแก้เป็น DetailViewController *dTVC = (DetailViewController *)[self.splitViewController.viewController lastObject];

    ครับ

    ReplyDelete
  13. ขอโทษทีครับที่ไม่ได้มาตอบ

    เท่าที่ดูก็คือตอนนี้คุณ Anonymous มีปัญหาเกี่ยวกับการส่งข้อมูลไปมาระหว่าง ViewController น่ะครับ เดี๋ยวพอทำไปสักพักแล้วจะเริ่มค้นพบ pattern ในการเขียนโปแกรมเอง ลองศึกษา delegate pattern ดูครับ

    ReplyDelete