توسعه دهنده نِیتیوْ(Native) موبایل ( اندروید/آی او اس(کنارگذاشته شده)) Moeindeveloper.ir
لیست کشویی در سویفت
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/i1si33c3fo1i.jpeg)
در این آموزش کوتاه یاد خواهیم گرفت که چگونه یک لیست با آیتم و زیر مجموعه بسازیم.
قبل از اینکه شروع کنیم شما می توانید مطالب قبلی را بخوانید:
http://vrgl.ir/HOR1C http://vrgl.ir/gfdiC
ایجاد پروژه در ایکس کد:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/ztvqobvljqhm.png)
در اینجا اطلاعات خود را تکمیل کنید:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/ndrhmqz7eicd.png)
بعد از تکمیل اطلاعات، در صفحه بعدی single view application را انتخاب کنید و مسیر ذخیره پروژه را تعیین کنید؛ حالا اپلیکیشن شما آماده کدنویسی است:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/yilf0qskiwft.png)
به اِستوریبٌرد اصلی خود بروید:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/zxaeioc1bog2.png)
از منوی پایین سمت راست، Table View را انتخاب کرده و به صورت دِرَگ و دِراپْ به داخل ویٌوکٌنْتٌرٌلِرْ خود بکشید:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/lgsnuprq3idj.png)
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/ku1etkxlmwye.png)
بعد از تغییر اندازه و ست کردن constraint ها، تِیبِل ویو را انتخاب کنید و در منوی سمت راست، Prototype cells را از ۰ به عدد ۲ تغییر بدید.
حالا در تِیبِل ویو دو آیتم را مشاهده می کنید:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/3uspt2ti1pae.png)
در قدم بعدی هر سِل را انتخاب کنید و به آن identifier بدهید:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/fgligjclefuu.png)
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/qq6asbkjxsq0.png)
در قدم بعدی استایل سِل ها را به basic تغییر بدهید:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/xkvvcytwkcss.png)
نکته: در اینجا میتوان فقط از یک سِل هم استفاده کرد!
در قدم بعدی، با انتخاب کردن تِیبِل ویو، دیتاسورس و دلیگیت را با استفاده از دِرَگ و دِراپْ به ویٌوٌکٌنْتٌرٌلِرْ ارتباط بدهیم.
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/e1jo1gat14n4.png)
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/tqja6ip439oy.webp)
پس از انجام دادن این کار، با استفاده از دِرَگ و دِراپْ، تِیبِل ویوی خود را به ViewController.swift متصل می کنیم:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/5utj8htcuyh1.webp)
حال، با افزودن دلیگیت و دیتاسورس در ویوکنترلر کنترل تِیبِل ویو خود را به دست بگیرید!
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/u8sgdjrf5ske.png)
متوجه اخطار ایکس کد می شوید که با افزودن متود های زیر، اخطار رفع می شود:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/liiusn8bnxax.png)
در اینجا ما دونوع داده داریم، یکی آیتم ها و یکی زیر مجموعه آیتم ها که می خواهیم آن ها را به صورت کشویی باز و بسته و نشان بدهیم!
پیش از هرکاری متود زیر را نیز اضافه کنید:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/shj1jtyhwts6.png)
حالا نوبت این است که اطلاعات را نمایش بدهیم، در اینجا ممکن است اطلاعات مورد نظر ما هرچیزی باشد، اما برای ساده کردن، کلاسی برای دیتامٌدل خود می سازیم و اطلاعات را درون آن قرار می دهیم:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/tojcadrb0v5a.png)
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/gulzsrsr0lqu.png)
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/ekpkuvjsqf1c.png)
- هر expandDataModel یک آیتم است.
- هر آیتم دارای مقدار isExpanded می باشد که وضعیت باز بودن و یا بسته بودن آیتم را به ما نشان می دهد.
- هر آیتم دارای یک عنوان است که آن را با sectionTitle مشخص می کنیم.
- هر آیتم دارای تعدادی زیر مجموعه است که برای ساده کردن از رشته استفاده شده که آن را با sectionRows مشخص می کنیم.
- در متود init، به هر پراپرتی یک مقدار می دهیم.
بر می گردیم به کلاس ویٌوکٌنْتٌرٌلِرْ خود و یک آرایه از دیتامٌدل خود به مقدار دلخواه می سازیم:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/ne3tgugbeuat.png)
حالا در این قسمت ما می خواهیم تعداد زیر مجموعه ها در یک آیتم را مشخص کنیم:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/qcnwocc2ujkt.png)
در اینجا ما مقدار آیتم ها را برگشت می دهیم در صورتی که آن ها باز باشند.
نکته: برای جلوگیری از fatal error: Array index out of range در سویفت، ما مقدار برگشتی را همیشه در صورت باز بودن بعلاوه ۱ می کنیم!
در متود numberOfSections، مقدار آیتم های خودرا برمی گردانیم:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/bdtziigje52r.png)
در متود cellForRowAt، مقادیر را در آیتم ها و زیر مجموعه ها پر می کنیم:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/9hfn9c35pxf8.png)
در اینجا ما ابتدا چک خواهیم کرد که آیا این یک section است یا row، در قدم بعدی اگر section بود با استفاده از indexPath.section مقدار section مورد نظر را بگیرد و اطلاعات را نمایش دهد! و اگر row بود، مقدار را با استفاده از indexPath.row -1 از section بگیرد و نمایش دهد!
نکته: در قسمت قبلی ما مقدار ایندکس را بعلاوه ۱ کردیم و حالا آن را در indexRow برای زیر مجموعه ها کم می کنیم.
حالا باید مشخص کنیم که وقتی یک آیتم انتخاب شد، در صورت باز بودن بسته و در صورت بسته بودن باز شود! و در این حال اگر زیر مجموعه انتخاب شد، عملی صورت نگیرد! به نظر خیلی پیچیده است اما در واقعیت نیست:
![](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/tld9jfqiwy5s.png)
توضیحات: در این قسمت ابتدا نوع را تعیین کردیم که آیا section است یا row، در صورت section یا همان آیتم بودن وضعیت باز بودن و یا بسته بودن را با استفاده از isExpanded بررسی کند؛ در صورت باز یا بسته بودن با تغییر مقدار isExpanded آن را کنترل کند و در آخر، با دستور reloadSections، مقدار تغییر یافته را اعمال کند!
پروژه رو اجرا کنید:
![?](https://files.virgool.io/upload/users/12050/posts/qvtqoxnvtcpf/l3yph6tovlqk.webp)
همانطور که می بینید، برنامه به درستی کار می کند!
جمع بندی: این نوع از آیتم ها بسیار کاربردی هستند و در مواردی مانند نمایش پست ها و نظرات مربوط به آن ها و... به کار می روند.
تِیبِلْ ویو یکی از عناصر حیاتی در برنامه نویسی آی او اس می باشد و عملکرد آن همانند ریسایکِلِر ویو در برنامه نویسی اندروید می باشد. و هر دو دارای ویژگی ها و ضعف های خاص خود می باشند. در آینده به مقایسه این دو عنصر خواهیم پرداخت!
کد پروژه در گیتهاب ?:
مطلبی دیگر از این انتشارات
مجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت نهم
مطلبی دیگر از این انتشارات
توسعه اپلیکیشن های مدرن اندرویدی قسمت سوم
مطلبی دیگر از این انتشارات
آموزش Retrofit 2 در اندروید - قسمت ۲