Вы можете использовать self.removeFromSuperview()
// Completely agree with comments, change to ChatOverlay
class chatOverlay: UIView {
@IBAction func closeOverlay(_ sender: UIButton) {
self.removeFromSuperview()
}
}
Если вы хотите, чтобы он исчезал
// Again, completely agree with comments, change to ChatOverlay
class chatOverlay: UIView {
@IBAction func closeOverlay(_ sender: UIButton) {
UIView.animate(withDuration: 0.5, animations: {
self.alpha = 0.0
}) { (_) in
self.removeFromSuperview()
}
}
}
Мне действительно интересно, как вы используя UIView
внутри chatOverlay
, когда вы только импортируете Foundation
? Кроме того, не могу понять, почему в overlayAdd
вы импортируете как Foundation
, так и UIKit
? UIKit
сам импортирует Foundation
. Самое большое совпадение ко мне - почему у вас есть класс overlayAdd
? Не должна ли функция show
быть более функцией create
(вы не показываете ее, пока не добавите ее в качестве поднабора) и просто станьте частью chatOverlay
? Что-то вроде:
// Completely agree with comments, change to ChatOverlay
class chatOverlay: UIView {
@IBAction func closeOverlay(_ sender: UIButton) {
UIView.animate(withDuration: 0.5, animations: {
self.alpha = 0.0
}) { (_) in
self.removeFromSuperview()
}
}
static func create(withFrame: frame, tag: Int) -> UIView{
let chatOverlay = xibLoad().chatOverlay()
chatOverlay.frame = frame
chatOverlay.tag = tag
/*
What in the world are you trying to do here???
let view = chatOverlay
return view
get rid of these two completely useless lines!
just return chatOverlay like below...
*/
return chatOverlay
}
}
, а затем в chatPage:
// Completely agree with comments, change to ChatPage
class chatPage: UIViewController {
override func viewDidLoad(){
view.addSubview(chatOverlay.create(withFrame: view.frame, tag: 101))
}
}
В качестве обходного пути для сохранения состояния RecyclerView
положение может быть сохранено в состоянии экземпляра.
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
if (contentRecyclerView != null)
when (feedType) {
MAIN.name, DISMISSED.name ->
outState.putParcelable(CONTENT_RECYCLER_VIEW_STATE,
contentRecyclerView.layoutManager!!.onSaveInstanceState())
SAVED.name ->
outState.putInt(CONTENT_RECYCLER_VIEW_POSITION,
(contentRecyclerView.layoutManager as LinearLayoutManager)
.findLastVisibleItemPosition())
}
}
override fun onViewStateRestored(savedInstanceState: Bundle?) {
super.onViewStateRestored(savedInstanceState)
if (savedInstanceState != null)
when (feedType) {
MAIN.name, DISMISSED.name -> savedRecyclerLayoutState = savedInstanceState.getParcelable(CONTENT_RECYCLER_VIEW_STATE)
SAVED.name -> savedRecyclerPosition = savedInstanceState.getInt(CONTENT_RECYCLER_VIEW_POSITION)
}
}
Чтобы убедиться, что сохраненный индекс не выходит за пределы, требуется проверка. Кроме того, поскольку элементы RecyclerView отклоняются, важно очистить сохраненную позицию индекса, чтобы RecyclerView не обновлялся после отклонения элемента, поскольку этот фрагмент кода содержится в [113 ] наблюдатель.
if (feedType == SAVED.name && savedRecyclerPosition != 0) {
val position: Int =
if (savedRecyclerPosition >= adapter.itemCount) adapter.itemCount - 1
else savedRecyclerPosition
contentRecyclerView.layoutManager?.scrollToPosition(position)
savedRecyclerPosition = 0
}