RemoveFromSuperview кейін UIView жою/босатудың тиісті жолы

IOS қолданбаларында сурет салу арқылы ойнаймын. Менде UIView деген қосалқы сынып бар кейбір сыныптар мен сызбалар бар. Пайдаланушы түймені басқан кезде, мен сыныпты құрып, бағдарламаның негізгі UIViewController көрінісінде addSubView жасаймын. Пайдаланушы сол батырманы қанша рет басып тұрса, сол сыныптың көптеген даналары көрініске қосылады. Ол жақсы жұмыс істейді.

Енді пайдаланушыға сол көріністердің біреуін жоюға мүмкіндік бергім келеді. Әзірге [self removeViewFromSuperview] параметрін пайдаланушы UIView әдісінің тегияларыныңBegan әдісіне қойдым. Мәселен, пайдаланушы суретті түсіргенде, ол көріністен алынады. Бірақ бұл шынымен де жойылған жоқ па? Көрініс түймені басқан кезде орындалатын әдіс ішінде жасалынғандықтан, оны UIViewController ішінен сілтеме жасауға ешқандай мүмкіндік жоқ. Жасалынған және жойылған UIView -мен жадты босатпағаныма көз жеткізудің дұрыс жолы қандай?

Қатысты ескертуде, егер мен өшіретін ауыстырғыштың негізгі терезесінің UIView -да қосқышты қою керек болса, онда ауыстырып қосқышты өшіруге қойылған болса, қалай барын тексере аламын? UIView қосалқы сыныбы ішінен тексеруге болатын AppDelegate -де қандай да бір логикалық айнымалылар бар ма? Бұл қалай сілтеме едім?

Сіздің көмегіңізге рахмет,
Штаттық

0
UIView қалай құрылады?
қосылды автор Jim Rhodes, көзі

4 жауаптар

Егер сіз осындай көріністі қоссаңыз:

UIView *viewBeingAdded = [[[UIView alloc] init] autorelease];
[view addSubview:viewBeingAdded];

Оны жадтан шығармай жоюға болады:

[theViewAboutToBeRemoved removeFromSuperview];

UISwitch туралы болсаңыз, сізге басқа нәрсе үшін қажет болмаса, оның мәнін кез келген жерде сақтаудың қажеті жоқ. Оның мәніне тікелей қол жеткізуге болады:

if ([theSwitch isOn]) { ... }

Сіз тіпті IBOutlet қажет емес, сіз коммутаторға оның тегімен кіруге болады:

UISwitch *theSwitch = (UISwitch *)[view viewWithTag:<# switch tag number #>];
if ([theSwitch isOn]) { ... }

Бұл жағдайда интерфейстің құрастырушысы үшін немесе оны жасаған кезде бірегей тегтің нөмірін орнатуыңыз қажет.

4
қосылды

Сіз [mainView addSubView: myView] жасағанда, mainView myView сақтайды. MyView-ды alloc/init-да жасасаңыз, онда сіз оны сақтап қойдыңыз. Егер сізде негізгі көрініске қосқаннан кейін myView қажет болмаса, оны қосқаннан кейін [myView релизін] орындаңыз. Оны негізгі көріністен алып тастағанда, ол босатылып, бөлінеді.

0
қосылды

Егер сіз UIView -ді alloc/init -мен жасасаңыз, оны қорытындыға қосыңыз да, көріністі босатыңыз, оның үстіне бұл шолу оны сақтайды. removeViewFromSuperview дегенмен жойылған кезде ол деоллокацияланатын болады.

0
қосылды

Әдетте ата-анаға жалғыз сілтеме қалдырып, оны қосқаннан кейін көріністі автоматты түрде қосып аламын.

Қосқышты тексеру үшін сіз IBOutlet қоссаңыз, оны тікелей тексере аласыз. (Бұл таза MVC болмауы мүмкін, бірақ оны [UIApplication sharedApplication] ішіне қоюды білмеймін. Делегат міндетті түрде таза болады.)

0
қосылды