티스토리 뷰

반응형


안녕하세요 :) Zedd입니다.


이글이 발행될때가 언제인진 잘 모르겠지만......

오늘...




ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

13.0도 안나왔는데........13.0도 정식버전이 안나왔는데...

13.1 베타가....


오타같지만 오타가 아니라는 사실..!!


암튼 이거때문에 오늘 트위터에 계속 이 글이 올라왔었네요.

WHAT?? 이러면서zzzz

아니 지금 GM이 얼마남지 않았을텐데..왜...

아니 13.0은 굉장히 의미가 있는 숫잔데....


뭐....ㅂ됐고 모든 API가 13.0+이기만 하면돼 나는..


암튼 오늘은~~

ㅈㅔ목을 UITableViewCell / UICollectionViewCell의 View들 < 이라고 지었는데

말그대로 UITableViewCell / UICollectionViewCell의 View들...을 공부해볼겁니다.


항상 보는 TableViewCell.

기본적으로 ContentView가 안에 있죠!?




collectionView는?!




ㅋ...
네 Xcode 10.2기준 없구요..아 10.3으로 업뎃해야하는딩



Xcode 11 beta 5 기준으로 ContentView가 있음.

아나

아니 제가 Xcode11에는 있다구 보여드릴려고 Xcode11로 CollectionView새로 추가하고 다시 10.2로 여니 


ㅎㅎ이 버전은 collectionview cell content view를 지원하지 않는 부분이샘

최소 Xcode 11에서 열어야하는 부분같음



"does not support collection view cell content view”

아니 미리미리 지원하면 이런일 없는거아냐 

니네가 잘하는 자랑 하지 그랬어


~ WWDC ~

이제 드디어! Xcode 11이 UICollectionViewCell contentView를 지원합니다! (비장)

~ 함성과 환호 ~


애플 특 : 진짜 당연히 됐어야 하는걸 지금 된다고 ~ 아주 자랑스럽게 ~ 말함 in WWDC


암튼 일단 지워볼게요


자 암튼;; 마치 지금 보면 UICollectionViewCell에는 ContentView가 없다가 

Xcode11에서 생겨따!!!! 라고 된것 같지만 아닙니다



UICollectionViewCell에도 당연하게도 ContentView가 있습니다만

왜 스토리보드에서는 안나오는지는.............





제가 어케알아요



자 암튼

오늘은 이녀석들을 조금 공부해보려고 합니다. 


UITableViewCell



UICollectionViewCell



아니 나는 정의는 같을줄 알았어...................


일단 UITableViewCell들의 View는 iOS 2.0+부터 나온반면 

UICollectionViewCell들의 View는 iOS 6.0+부터 나왔습니다.

상당히 늦게나왔네요;;


그래서 정의 다른거지??그치?????


자 암튼 둘다 왔다갔다하면 제가 헷갈리므로 하나 끝내고 나머지 하나 보겠읍니다..



UITableViewCell




ContentView부터 보죠.

정의는 꽤나 간단한데요.


The content view of the cell object.


...

cell 객체의..content view..


자;;암튼 당연하게도 UIView타입입니다.


UITableViewCell 객체의 content view는 cell에서 표시하는 content의 default superview입니다.

 단순히 또 다른 view를 추가하여 cell을 커스텀하려면 cell을 editing mode로 전환하거나,

editing mode에서 벗어날 때 적절하게 배치되도록 content view에 추가해야합니다.


편집모드..?


아 이거군


음....discussion은 이게 끝입니다...



파란색 앞에있는게 ContentView. 






다음으로 backgroundView.


이친구는 ContentView와 다르게 UIView?타입입니다.


UITableView에 스타일이 있는거 다들 아시죠!?

plain과 grouped가 있는데, 



요거


암튼 Plain에서 이 backgroundView가 기본값이 nil이고, grouped에서는 non-nil이라고 해요.

UITableViewCell은 backgroundView를 다른 모든 view뒤에 subview로 추가하고, 

현재 프레임 위치를 사용한다고 합니다.


자 그럼 제가 만든 TableView를 grouped스타일로 바꿔볼게용!!


....

아니 non-nil이래매.. nil나옴zzzzz

....

뭐지? 


제가 지금 너무 귀찮아서 TableViewCell class도 안만들고 걍 하고있는데....

이런거 때문ㅇ 아니죠...


안되면 넣어준다



일단 대충 이렇게 하고 빌드해봅니다.

/


ContentView뒤에 backgroundView가 생겼움

원래는 backgroundView가 아예 없고 바로 ContentView나옴




이렇게



그래서 어따쓰는거지...??...

혹시 아시는 분...


얘 모르면 다음에 있는../

얘 어떡하라고..

암튼 정의는

cell이 selected되었을 때 background로서 사용되는 view.


backgroundView와 마찬가지로 UIView?타입이고  

역시나 backgroundView와 마찬가지로 UITableView Style이 plain일때는 nil이고 

Grouped일때는 non-nil이라고 합니다. 

UITableViewCell은 cell이 selected되었을 때 이 프로퍼티의 값을 subview로 추가합니다. 

추가될 때 backgroundView바로 위에 추가됩니다. 

setSelected를 호출하면 selected background View가 애니메이션과 함께 

alpha fade로 나타납니다


아? 설마

설마 그게 너니?

아 이거 폰으로 테스트 해야겠넹



역시....


zzz시뮬레이터로는 cell 누르고 있을 때 뷰 계층보는 걸 못누르기 때문에..디바이스로 왔습니다. 자 일단ㅁ 별다른 작업을 안해주면 기본적으로.. cell을 누를 때 저렇게 cell의 색상이 바뀌는거 암튼 먼지 다들 아시죠??


암튼 그렇게 되는데 cell의 색상이 바뀌는게 아니라..

그니까 cell의 backgroundColor가 바뀌는게 아니라



cell을 누를때 진짜 contentView 위에 추가되네욥


여기서 가설 1..

아 그럼 backgroundView도 뭔 action을 하면 나타나는 건가? 



안누르면 selectedBackgroundView가 안나오니까요 ㅇㅇ

ㄱ그럼 안눌렀을 때 selectedBackgroundView가 nil인지 보면됨




cellForRowAt에서 찍은건데..backgroundView는 nil이 나오고..

selectedBackgroundView는..나오는군....아니...반대여야 하는거 아니냐고....

도대체 애플넘들이 생각은 항상 내 예상을 벗어나 진짜


setHighlighted에서 찍어봐도..backgroundView는 nil이고 뭐 selectedBackgroundView가 여기서는 nil이 아니라는 건 알겠는데...backgroundView는 그럼 언제 나오는건가요?!??


암튼 우리가 cell 탭했을 때 나오는 친구가 selectedBackgroundView라는 사실만은 알아서 다행입니다..


UITableViewCell의 마지막..

multipleSelectionBackgroundView



오 이녀석은 다른친구들이랑은 다르게 iOS 5.0부터 나왔나봐용

정의를 보기전에..selected background view를 보고 난 뒤라 그런지 뭔지 좀 감이 오시나요?




맞습니다..!

TableView에서 여러개의 row를 선택할 수 있게 허용한 경우에, 

selected cell에 사용하는 backgroundView라고 해요.


흠 근데 한개일때랑..여러개일때랑을 왜 나눈건지 모르겠네요.

각 cell마다 selectedBackgroundView를 가지고 있을텐데..그거 걍 뿌리면 되는거 아녀?


SingleSelection



(backgroundView는 계속 nil이라 ㅂ일단 뺌)


multiple Selection



multipleSelectionBackgroundView는 일단 cellForRowAt에서는 nil이군요. 

아니 selectedBackgroundView도 nil이어야 하는거 아니냐고...

정의는 selected될때 "add"된대매..

이미 add되어있으면 어쩌자는거


아니 도대체 어따쓰는거야



아니 거봐  mutipleSelection일때도 selectedBackgroundView나오자나zzz




후..


아 근데 실험하다 보니까 일단 좀 차이점이 있네



selectedBackgroundView backgroundColor는 darkGray로.

multipleSelectionBackgroundView는 없으니까 만들어주고.....

.backgroundColor를 black으로 줘봅니다.


SingleSelection





multipleSelection



사실 single이든 multiple이든 multipleSelectionBackgroundView는 초기화가 될텐데, 



mode에 따라 나타나지는게 다르네요



뭔가 새로운 사실 많이 알아간다..

사실 multiple Selection을 많이 할 일이 저는 그닥 없었어서..


자 암튼 끝!!!!!!!!


UICollectionViewCell시간입니당





UICollectionViewCell





이친구는 3개밖에 없어요


ContentView

cell의 custom content를 추가하는 main view입니다.

"add your cell's custom content"에 그래도 한번 주의를 줍시다.


UITableViewCell의 contentView와 마찬가지로 UIView타입이구요. 

cell을 구성할 때 cell content를 나타내는 모든 custom view를 이 view(contentView)에 추가합니다. cell객체는 background view앞에 이 view의 content를 배치합니다. 


뭐 ㅇㅋㅇㅋ

이거 10.2랑 베타랑 같이 확인해야하나?...ㅡㅡ

아나..



ㅋㅋㅋㅋㅋㅋㅋ 

그냥 UIView..



TableViewCell에  contentView는 이름이라도 있는데..


자 그럼 Xcode 11 베타로 열어보겠씁니다.

참고로 beta 5임..



그래도 UIView구만..

....

아니 이름 주란말이야





backgroundView


UITableViewCell때와 마찬가지로 UIView?타입이고 정의는

cell의 other content(?)뒤에 표시되는 view입니다.


cell의 custom background view를 지정하려면 이 프로퍼티를 사용하세욥

background view는 뒤에 위치하게되고, cell bounds(경계)를 채우도록(fills) 프레임이 자동으로 조절됩니다..


아 또 근데 여기서 말하는거 보니까

backgroundView가 있는게 아니라 

야 니가 필요하면 UIView만들어서 backgroundView에다가 넣어;; < 이말같네요


뭔가 UITableViewCell에서 backgroundView는 

Plain에서 이 backgroundView가 기본값이 nil이고, grouped에서는 non-nil

이런식으로 말하니까 grouped에서는 non-nil이다! 

라고 말해서 뭔가 grouped면 있어!! 라고 생각했는데..


지금 UICollectionViewCell꺼 보니까 

뭔가..너가 지정하고싶으면~~ 만들어ㅓㅅ 넣으면~~얘가 알아서 지 위치 찾을거얌 하는것 같음..


해보쟈


암튼 넣어줘봤습니다.

노란색 view가 backgroundView에요.

contentView뒤로 들어가는것을 볼 수 있씁니다. 




selectedBackgroundView


역시나 UIView?타입이며 cell을 선택할때 background view 바로 위에 표시되는 view입니다. 

이 view를 사용하여 cell을 선택할 때, custom appearance를 제공 할 수 있습니다.

cell을 선택하면 이 view가 backgroundView 위, contentView뒤에 쌓이게 됩니다. 


오 그럼 backgroundView그냥 두고 한번 해볼게요.

역시나 cellForItemAt에서..



근데 왜 UICollectionViewCell에는 setSelected랑 setHighlighted가 없을깜..



암튼..! selectedBackgroundView가 회색ㄱ인데, 

정의대로 이 view가 backgroundView 위, contentView뒤에 위치하는 것을 볼 수 있죠..!!


끝났군요....이거 관련해서 제 이슈를 하나 설명하고 싶은데zz이건 다른글에서 다루도록 할게요!

뭐 별다른 큰 깨달음은 없었지만..selectedBackgroundView의 존재를 알았으니 만족!


좀 제대로 정리하고 싶은 글이 많은데

흠 왤케 잘 안써지지






반응형

'iOS' 카테고리의 다른 글

iOS ) adjustedContentInset / contentInsetAdjustmentBehavior  (1) 2019.09.12
iOS ) ContentInset  (2) 2019.09.08
iOS ) DecodingError  (1) 2019.08.25
iOS) decelerationRate  (0) 2019.08.24
iOS ) Sign in with Apple (1)  (9) 2019.07.28