استفاده از خاصیت کلیک شدن روی اجزای داخل tablaView نه خود سلول
باسلام. در آموزشها نحوه برنامه نویسی زمانی که روی سلول کلیک میشود، موجود است ولی اگر داخل سلول دکمه داشته باشیم نمیتوان از خاصیت کلیک استفاده کرد ولی بسیار محدود.
به عنوان مثال با تعریف اکشن برای دکمه داخل فایل سلول میتوانیم کارهای کوچکی انجام دهیم ولی نمیتوان از آنجا وارد ویو جدید شد. فرض کنید دکمه edit داخل یک سلول تعریف میکنیم. و اکشن برای آن مینویسیم. بدلیل اینکه اکشن ما داخی فایل سلول(اکستند شده از UITableView) هست دیگر به امکاناتی نظیر امکانات نمایش یا جابجا شدن بین سلولها دسترسی نداریم.
دوستان اگر در این زمینه تجربه ای دارند درمیان بگذارند ممنون میشوم.
سلام جناب. اگر منظورتون این هست که شما بصورت سفارشی حتما تو استوری برد یک سلول طراحی کردین (یعنی مثلا اومدین دکمه و سویچ لیبل خودتون درست کردین ) خوب دیگه نمیتونین درست ربط بدین اکشن ها را در جدول. چون بالاخره کلاس هاشون از هم جدا هست.
فرض کنید شما میخواین محتویات یک سلول رو با استفاده از یک دکمه درون سلول تغییر بدید : خوب اینجاست که شما باید کنترل مورد نظر رو درون کلاس جدول پیکر بندی (چنانچه auto layout caonstraint نیاز داشته باشه باید برنامه نویسیش کنی) و بعد پیوستش کنی به سلول اونوقت یک target براش معرفی کنی. وسپس با دریافت اندیس اون سلول انجامش بدید
ببخشید اگه یه کم گنگ به نظر میرسه
اتفاقا چند روز پیش من هم همین مشکل رو داشتم که با کمک google و stackoverflow تونستم حلش کنم . اینم بگم از نسخه xcode و swift که آقای کاشی زاده روی سایت قرار داده استفاده میکنم . ( اینو گفتم ، چون توی نسخه های مختلف swift ، سینتکس متفاوتی داره )
اون چیزی که من میخواستم انجام بدم این بود که روی یک button که درون سلول collectionview ( یا tableview ) تعریف شده بود کلیک کنم و اتفاقی دیگه در viewcontroller دیگه صورت بگیره . و راهی که پیدا کردم استفاده از NSNotificationCenter بود .
کد زیر را در اکشن کالشکسن ویو تعریف کردم
@IBAction func btnOpt1(sender: AnyObject) {
NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
}
و کد زیر را هم در ویو کنترلر دیگر تعریف کردم :
به این صورت که کد زیر را در متد ویو دید لود اصلی :
NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadList:", name: "load", object: nil)
و کد زیر را به صورت متدی مجزا در همین ویو کنترلر ( خارج از ویو دید لود :
func loadList (notification: NSNotification) {
print("")
}
که به جای پرینت میشه از هر دستور دگ استفاده کرد و با کلیک شدن بر روی باتن تعریف شده در سلول میشه در ویوکنترلر دیگه کار دیگه ای انجام داد
سلام ممنون که وقت گذاشتید.خیلی عالی کار کرد. فقط اضافه کنم که فانکشن دوم در کنترل ویویی نوشته میشه که table داخلش هست. در واقع در viewdidload ویو کنترلر table تعریف میشه..
بسیار ممنونم واقعا بسیار کاربردی هست
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .